簡體   English   中英

從ODBC DSN連接切換到OLEDB后出現錯誤

[英]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屬性

如果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 ,然后您的代碼將起作用。
順便說一句,默認為-1adCmdUnknown )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM