2009-10-20 282 views
2

在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

尝试在您的生产服务器中创建.udl文件并在那里构建该连接字符串;也许你已经安装了一些不同的软件包 – 2009-10-20 14:20:00

回答

1

@RobV - 创建一个连接对象和分配,要记录的确是一种选择,但是,一个快捷方式,这是分配一个连接字符串记录 - 它确实工作。

其实下面的代码是最有效的:

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

林不知道发生了什么事与我得到的错误,但它突然就停不已经改变任何代码!

+0

如果你只进行一次数据库调用,那么是的,这样做可能是简洁的,但是你将为每个打开的记录集创建一个数据库连接,这不是很有效 - 从MSDN“但是,如果要通过同一个连接打开多个Recordset对象,则应该显式创建并打开一个Connection对象;这会将Connection对象分配给一个对象变量,如果在打开Recordset对象时不使用此对象变量,ADO会创建为每个新Recordset添加一个新的Connection对象,即使您传递了相同的连接字符串。“ – RobV 2009-11-24 16:53:33

+0

但是,你是写你可以将ActiveConnection设置为字符串 – RobV 2009-11-24 16:55:52

+0

图例 - 这可以很好地解释为什么我得到超时错误(由超过5个连接时MSDE工作负载调控器引起) - 谢谢。 – Jimbo 2009-11-26 19:14:59

0

试着做类似于此的MSDN Sample

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

1

ActiveConnection属性采用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财产以这种方式在所有的,你应该真正使用它的连接断开,一个记录,以避免将数据库连接打开unecessarily:

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 
//...