共用方式為


命令參數

參數會以問號字元在命令文字中標示。 例如,下列 SQL 語句會標示為單一輸入參數:

{call SalesByCategory('Produce', ?)}  

為了減少網路流量來改善效能,除非在執行命令之前呼叫 ICommandWithParameters::GetParameterInfoICommandPrepare::P repare,否則 SQL Server Native Client OLE DB 提供者不會自動衍生參數資訊。 這表示 SQL Server Native Client OLE DB 提供者不會自動:

  • 確認使用 ICommandWithParameters::SetParameterInfo 指定的數據類型正確性。

  • 從存取子系結資訊中指定的 DBTYPE 對應至參數的正確 SQL Server 數據類型。

如果應用程式指定與 參數 SQL Server 數據類型不相容的數據類型,應用程式將會收到可能的錯誤或遺失這些方法的精確度。

為了確保這不會發生,應用程式應該:

  • 如果硬式編碼 ICommandWithParameters::SetParameterInfo,請確定 pwszDataSourceType 符合參數的 SQL Server 數據類型。

  • 如果硬式編碼存取子,請確定係結至參數的 DBTYPE 值與參數的 SQL Server 數據類型相同。

  • 撰寫應用程式以呼叫 ICommandWithParameters::GetParameterInfo ,讓提供者可以動態取得參數的 SQL Server 數據類型。 請注意,這會導致伺服器進行額外的網路來回行程。

備註

提供者不支持針對包含FROM子句的任何 SQL Server UPDATE 或 DELETE 語句呼叫 ICommandWithParameters::GetParameterInfo ;針對任何 SQL 語句,視包含參數的子查詢而定;針對 SQL 語句,在比較的兩個運算式中包含參數標記,例如或量化述詞;或查詢其中一個參數是函式的參數。 處理 SQL 語句批次時,提供者也不支援在批次中的第一個語句之後呼叫 ICommandWithParameters::GetParameterInfo 中的參數標記。 Transact-SQL 命令中不允許批註 (/* */) 。

SQL Server Native Client OLE DB 提供者支援 SQL 語句命令中的輸入參數。 在過程調用命令上,SQL Server Native Client OLE DB 提供者支援輸入、輸出和輸入/輸出參數。 輸出參數值會在執行時傳回給應用程式(只有在未傳回任何數據列集時),或當應用程式耗盡所有傳回的數據列集時。 若要確保傳回的值有效,請使用 IMultipleResults 強制使用數據列集。

預存程式參數的名稱不需要在 DBPARAMBINDINFO 結構中指定。 針對 pwszName 成員的值使用 NULL,表示 SQL Server Native Client OLE DB 提供者應該忽略參數名稱,並且只使用 ICommandWithParameters::SetParameterInforgParamOrdinals 成員中指定的序數。 如果命令文字同時包含具名和未命名的參數,則必須在任何具名參數之前指定所有未命名的參數。

如果指定預存程序參數的名稱,SQL Server Native Client OLE DB 提供者會檢查名稱,以確保它有效。 當 SQL Server Native Client OLE DB 提供者從取用者收到錯誤參數名稱時,會傳回錯誤。

備註

為了公開對 SQL Server XML 和使用者定義型別 (UDT) 的支援,SQL Server Native Client OLE DB 提供者會實作新的 ISSCommandWithParameters 介面。

另請參閱

命令