2

Windows Server 2003 上的 IIS 出现问题(使用经典的 ASP Web 应用程序) 数据库服务器 (SQL Server 2005) 在同一台机器上。

我创建了一个记录集,并将其活动连接设置如下:

Dim RS
Set RS = Server.CreateObject("ADODB.Recordset")
RS.ActiveConnection = "Provider=SQLOLEDB;Network Library=DBMSSOCN;Data Source=xxx.xxx.xxx.xxx,1433;Initial Catalog=mydatabase;User ID=myusername;Password=mypassword;"

问题是,一旦我设置了这个连接字符串,就会引发以下错误:

参数类型错误、超出可接受范围或相互冲突。

我知道这个连接字符串没有问题,因为当我使用我的开发服务器时,将连接指向远程数据库,它工作得很好。

我尝试了许多连接字符串变体(来自 connectionstrings.com)并且它们给出了相同的错误。

4

3 回答 3

1

ActiveConnection属性采用 Object 类型ADODB.Connection而不是 String。您不能直接分配连接字符串,您需要分配数据库连接。您的代码需要如下所示:

Set objDB = Server.CreateObject("ADODB.Connection");
objDB.Open = "Provider=SQLOLEDB;Network Library=DBMSSOCN;Data Source=xxx.xxx.xxx.xxx,1433;Initial Catalog=mydatabase;User ID=myusername;Password=mypassword;"
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.ActiveConnection = objDB

实际上,您根本不应该以这种方式真正使用该ActiveConnection属性,您应该实际使用它来断开记录集以避免不必要地保持数据库连接打开:

Set objDB = Server.CreateObject("ADODB.Connection");
objDB.Open = "Provider=SQLOLEDB;Network Library=DBMSSOCN;Data Source=xxx.xxx.xxx.xxx,1433;Initial Catalog=mydatabase;User ID=myusername;Password=mypassword;"

//Get a Recordset and prep it for forward only disconnected use
Set objRS = Server.CreateObject("ADODB.Recordset")
objRS.CursorLocation = adUseClient
objRS.CursorType = adOpenStatic
objRS.LockType = adLockReadOnly
objRS.Open "SELECT * FROM SOME_TABLE", objDB

//Now disconnect the recordset and dispose of the database connection
Set objRS.ActiveConnection = Nothing
objDB.Close
Set objDB = Nothing

//Now do whatever you want with the Recordset
//...
于 2009-10-21T08:25:35.737 回答
1

@RobV - 创建一个连接对象并将其分配给记录集确实是一个选项,但是,一个快捷方式是将连接字符串分配给记录集 - 这确实有效。

事实上,下面的代码是最有效的:

Dim RS
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open <sqlstatement>, <connectionstring>

我不确定我遇到的错误发生了什么,但它突然停止了,没有更改任何代码!

于 2009-10-22T10:56:22.197 回答
0

尝试执行类似于此MSDN Sample的操作。

它单独创建一个连接,然后分配它。

于 2009-10-20T14:22:55.147 回答