在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)并且它们也给出了相同的错误。
答案 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类似的操作。
它分别创建一个连接,然后分配它。