介绍如何使用 ActiveX 数据对象 (ADO) 在 ASP 脚本中建立到 SQL Server 的连接,同时利用 ODBC 3.0 的连接池功能。
连接池
启用 ODBC 连接池。
有关连接池的其他信息以及有关如何启用连接池功能的说明,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
164221 INFO:如何在 ODBC 应用程序中启用连接池
ODBC DSN
使用“ODBC 管理器”,在安装了 Microsoft Internet Information Server (IIS) 的计算机上创建一个系统数据源名称 (DSN)。指定一次连接属性,然后在每个页面上重新使用此属性。例如,在 Global.asa 文件的“Session_OnStart”事件中,将连接属性定义为:
- Session("ConnectionString") =
- "dsn=SQLSysDSN;uid=<username>;pwd=<strong password>;DATABASE=pubs;APP=ASP Script"
确保满足下列所有条件:
• “系统 DSN”定义中没有选中“受信任连接”框。
• SQL Server 安全模式不是“Windows NT 集成”。
• 在连接属性中,uid 不为空。
否则,到 SQL Server 的连接可能会失败,并收到以下错误消息:
Microsoft OLE DB provider for ODBC Drivers error ’80004005′
[Microsoft][ODBC SQL Server Driver][SQL Server]Login failed- User:_
Reason: Not defined as a valid user of a trusted SQL Server connection.
Global.asa是否使用 Global.asa 文件是可选的。在其位置上,在此文件中创建的条目通常可以放到应用程序调用的第一页上。假定 ASP 脚本位于一个在“Internet 服务管理器”中没有定义为虚拟目录的文件夹中,而是位于另一个虚拟目录下面,那么包含 Session 变量和 DSN 定义的 Global.asa 文件就必须保留在该虚拟目录中。否则,将收到以下错误消息:
Microsoft OLE DB Provider for ODBC Drivers error ’80004005′
[Microsoft][ODBC Driver Manager] Data source name not found and no
default driver specified
ASP 脚本中的连接
通过打开和关闭到每个 Active Server Pages 上的数据库的连接来利用连接池。要打开该连接,请在页面的
- <%
- Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
- OBJdbConnection.Open Session("ConnectionString") %>
要关闭该连接,请直接将以下内容放到 标记后:
- <%
- OBJdbConnection.Close
- Set OBJdbConnection = Nothing
- %>
如果没有按照本文前面介绍的那样正确定义连接设置,您可能会收到以下两条错误消息:
Microsoft OLE DB Provider for ODBC Drivers error ’80004005′
[Microsoft][ODBC SQL Server Driver][DBNMPNTW]Connection broken.
- 或者 -
Microsoft OLE DB Provider for ODBC Drivers error ’80004005′
[Microsoft][ODBC SQL Server Driver]Communication link failure
此处是一个包含 Global.asa 和 Authors.asp 文件的示例应用程序。此示例应用程序将返回名为“authors”的“pubs”表中的四列和所有记录。
注意:您必须先将 UID
Global.asa
- <SCRIPT LANGUAGE=VBScript RUNAT=Server>
- Sub Session_OnStart
- Session("ConnectionString") =
- "DSN=SQLSysDSN;UID=<username>;PWD=<strong password>;DATABASE=pubs;APP=ASP script"
- Session("ConnectionTimeout") = 15
- Session("CommandTimeout") = 30
- End Sub
- Sub Session_OnEnd
- End Sub
- </SCRIPT>
Authors.asp
- <HTML>
- <HEAD>
- <TITLE>All Authors</TITLE>
- </HEAD>
- <BODY BGCOLOR="#FFFFFF">
- <% Set OBJdbConnection = Server.CreateObject("ADODB.Connection")
- OBJdbConnection.ConnectionTimeout = Session("ConnectionTimeout")
- OBJdbConnection.CommandTimeout = Session("CommandTimeout")
- OBJdbConnection.Open Session("ConnectionString")
- Set SQLStmt = Server.CreateObject("ADODB.Command")
- Set RS = Server.CreateObject ("ADODB.Recordset")
- %>
- <p>
- <table border="0" bordercolor="#000000">
- <%
- SQLStmt.CommandText = "select * from authors"
- SQLStmt.CommandType = 1
- Set SQLStmt.ActiveConnection = OBJdbConnection
- RS.Open SQLStmt
- Do While Not RS.EOF
- %>
- <TR>
- <TD Width = 150 ALIGN=LEFT>
- <FONT SIZE=+1>
- <%= RS("au_id") %>
- </FONT></TD>
- <TD></TD>
- <TD Width = 150 ALIGN=LEFT>
- <FONT SIZE=+1>
- <%= RS("au_lname") %>
- </FONT></TD>
- <TD Width = 150 ALIGN=LEFT>
- <FONT SIZE=+1>
- <%= RS("au_fname") %>
- </FONT></TD>
- <TD Width = 150 ALIGN=LEFT>
- <FONT SIZE=+1>
- <%= RS("phone") %>
- </FONT></TD>
- </TR>
- <%
- RS.MoveNext
- Loop
- %>
- </table>
- <hr>
- <p>
- </BODY>
- <% OBJdbConnection.Close
- Set OBJdbConnection = Nothing
- %>
- </HTML>
适用于:
• Microsoft SQL Server 2000 标准版
• Microsoft SQL Server 7.0 标准版
• Microsoft SQL Server 6.5 标准版
• Microsoft SQL Server 6.0 标准版
• Microsoft SQL Server 4.21a 标准版
• Microsoft Internet Information Server 4.0
• Microsoft Internet Information Server 3.0
• Microsoft Internet Information Services 5.0
• Microsoft SQL Server 2005 Standard Edition
• Microsoft SQL Server 2005 Express Edition
• Microsoft SQL Server 2005 Developer Edition
• Microsoft SQL 2005 Server Enterprise
• Microsoft SQL 2005 Server Workgroup