连接字符串错误

时间:2009-10-20 14:16:47

标签: sql-server-2005 asp-classic connection-string adodb

在Windows Server 2003上遇到IIS问题(使用传统的ASP Web应用程序) 数据库服务器(SQL Server 2005)位于同一台计算机上。

我创建了一个记录集,并按如下方式设置其activeconnection:

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)并且它们也给出了相同的错误。

3 个答案:

答案 0 :(得分:1)

ActiveConnection属性采用类型为ADODB.Connection的Object而不是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
//...

答案 1 :(得分:1)

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

事实上,以下代码效率最高:

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

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

答案 2 :(得分:0)

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

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