![](/img/trans.png)
[英]ODBC DSN Connection Error - SQL Server 2014 Express Classic ASP
[英]Error after switching from ODBC DSN connection to 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調用不能與其他連接字符串一起使用?
有一些輸入錯誤, .CreateParameters => .CreateParameter
和.CursorLocatoin => .CursorLocation
我忽略了它們,因為看起來錯別字僅適用於該問題。
如果CommandType屬性值設置為默認值adCmdUnknown,則性能可能會降低,因為ADO必須調用提供程序來確定CommandText屬性是SQL語句,存儲過程還是表名。 如果知道使用的命令類型,則設置CommandType屬性將指示ADO直接轉到相關代碼。 如果CommandType屬性與CommandText屬性中的命令類型不匹配,則在調用Execute方法時會發生錯誤。
據我了解,未指定CommandType
時,操作因提供程序而異。
我使用SQL Server Profiler跟蹤查詢。 我看到的是OLEDB Provider,沒有CommandType屬性的命令對象將在后台執行不帶參數的查詢,例如: Exec storedproc
,這意味着如果過程是無參數的,則可以正常工作。 但是它應該是Exec storedproc parametervalue
。 另一方面,就像您說的那樣,相同的代碼在MySQL上就像一個魅力。
因此,需要將cmd.CommandType
指定為等於4的 adCmdStoredProc
,然后您的代碼將起作用。
順便說一句,默認為-1 ( adCmdUnknown
)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.