我的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调用无法使用不同的连接字符串?
答案 0 :(得分:1)
有一些错别字,.CreateParameters => .CreateParameter
和.CursorLocatoin => .CursorLocation
我忽略了它们,因为看起来像拼写错误只适用于这个问题。
如果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
)。