文章編號: 174223 - 上次校閱: 2004年7月1日 - 版次: 1.1

如何重新整理預存程序的 ADO 參數集合

系統提示本文適用於您使用的作業系統之外的作業系統。與您不相關的文章內容已停用。
全部展開 | 全部摺疊

結論

本文將示範兩種技術來填為命令物件,使用預存程序之 ADO 參數集合。

其他相關資訊

請考慮使用輸入、 輸出,和傳回參數這個預存程序:
create proc sp_AdoTest( @InParam int, @OutParam int OUTPUT )
as
SELECT @OutParam = @InParam + 10
SELECT * FROM Authors
WHERE State <> 'CA'
RETURN @OutParam +10
				
「 ADO Parameters 集合需要一個物件的每個參數,而且更重要的是每個參數的方向屬性必須符合在呼叫語法中參數的順序。

下列程式碼示範設定對預存程序呼叫及明確建立參數物件的屬性:
...
Set Cmd1 = New ADODB.Command
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText= "sp_AdoTest"

Set Param1 = Cmd1.CreateParameter(, adInteger, adParamReturnValue)
Cmd1.Parameters.Append Param1

Set Param2 = Cmd1.CreateParameter(, adInteger, adParamInput)
Param2.Value = 10
Cmd1.Parameters.Append Param2

Set Param3 = Cmd1.CreateParameter(, adInteger, adParamOutput)
Cmd1.Parameters.Append Param3

Set Rs1 = Cmd1.Execute()
				
注意: 此項技術是危險的如果預存程序變更順序或參數的方向,這段程式碼,就必須加以變更。沒有一個多小替代,可取得相同的結果。藉由只針對 CommandText 列出預存程序名稱,並重新整理參數集合,ADO 會自動填入參數集合另一個則用於每個所需的預存程序的參數。但是,一個潛在的缺點,這個方法是涉及額外負荷。它不會需要來回伺服器以取得參數的資訊,因此沒有更高的效能衝擊比如果您建置參數自己。這是一個好方法,可決定正確的參數屬性適用於程序。使用資訊傳回給設定參數,如上面所示範的程式碼中。這展示在以下的程式碼中:
Cmd1.ActiveConnection = Conn1
Cmd1.CommandText = "sp_AdoTest"
Cmd1.CommandType = adCmdStoredProc
Cmd1.Parameters.Refresh
Cmd1.Parameters(1).Value = 10

Set Rs1 = Cmd1.Execute()
				
這會產生資料列完全相同集,但可讓 ADO 填入參數集合會自動並正確 (雖然這段程式碼正確地決定第二個參數為輸入的參數)。

注意:Parameters.refresh 會在某些情況下失敗,或傳回不完全正確的資訊。 Parameters.refresh 就特別容易受到時在 ASP 網頁上使用。 請查詢 「 parameters.refresh 」 來尋找其他談論的一些問題 Parameter.refresh 相關聯的文件上。

?考

如需 %1 的詳細資訊,按一下面的文件編號 %2 下面,檢視 「 Microsoft 知識庫 」 中的文件 %2 件:
225897? (http://support.microsoft.com/kb/225897/EN-US/ ) ACC2000: 如何使用參數 ActiveX 資料物件 (ADO) 與 Jet

這篇文章中的資訊適用於:
  • Microsoft ActiveX Data Objects 1.0
  • Microsoft ActiveX Data Objects 1.5
  • Microsoft ActiveX Data Objects 2.0
  • Microsoft ActiveX Data Objects 2.1 Service Pack 2
  • Microsoft ActiveX Data Objects 2.5
  • Microsoft ActiveX Data Objects 2.6
  • Microsoft ActiveX Data Objects 2.7
關鍵字:?
kbmt kbdatabase kbhowto KB174223 KbMtzh
機器翻譯機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:174223? (http://support.microsoft.com/kb/174223/en-us/ )
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。
Retired KB Article依現狀不再更新的知識庫內容免責聲明
本文旨在說明 Microsoft 不再提供支援的產品。因此,本文係依「現狀」提供,不會再更新。