从ODBC DSN连接切换到OLEDB后出错

时间:2012-07-26 17:08:35

标签: sql-server asp-classic odbc oledb

我的ASP应用程序到SQL Server数据库的超时和登录连接问题一直存在。我的托管服务提供商建议将我的连接字符串从ODBC DSN更改为OLEDB。一旦我这样做,我在执行我的第一个存储过程时会收到此错误。

  

过程或函数'storedproc'需要参数'@param1',其中   没有提供。

这是我的连接字符串

Dim objconn
Set objconn = Server.CreateObject("ADODB.Connection")
objconn.open "Provider=SQLOLEDB;Data Source=localhost\sqlexpress;Initial Catalog=db;user id=user;password=pw"

这是我存储的proc调用

Dim objrs, cmd
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = objconn
cmd.CommandText = "storedproc"
cmd.Parameters.Append(cmd.CreateParameters("param1",adDouble,adParamInput,,session("param1")))
Set objrs = Server.CreateObject("ADODB.Recordset")
objrs.CursorLocatoin = adUseClient
objrs.Open cmd

为什么我的proc调用无法使用不同的连接字符串?

1 个答案:

答案 0 :(得分:1)

有一些错别字,.CreateParameters => .CreateParameter.CursorLocatoin => .CursorLocation
我忽略了它们,因为看起来像拼写错误只适用于这个问题。

CommandType Property

  

如果CommandType属性值设置为默认值,   adCmdUnknown,因为ADO,您可能会遇到性能下降   必须调用提供程序以确定是否为CommandText   property是SQL语句,存储过程或表名。如果   你知道你正在使用什么类型的命令,设置CommandType   property指示ADO直接转到相关代码。如果   CommandType属性与中的命令类型不匹配   CommandText属性,调用Execute时发生错误   方法

据我了解,当未指定CommandType时,操作因提供商而异。

我使用SQL Server Profiler跟踪查询。我看到的是OLEDB Provider,没有CommandType属性的命令对象在后台执行没有参数的查询:Exec storedproc,这意味着如果过程是无参数的,它可以正常工作。但它应该是Exec storedproc parametervalue。另一方面,正如你所说,相同的代码就像MySQL上的魅力一样。

因此,需要将cmd.CommandType指定为等于 4 adCmdStoredProc,然后您的代码才能生效。  
顺便说一下,默认情况下它是 -1 adCmdUnknown)。