Share via


SQL Server Native Client命令參數

適用於:SQL ServerAzure SQL DatabaseAzure SQL 受控執行個體Azure Synapse AnalyticsAnalytics Platform System (PDW)

在命令文字中,參數會以問號字元來標示。 例如,下列 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 資料類型不相容,應用程式將在使用其中一種方法時收到可能的錯誤或遺失有效位數。

若要確保不會發生這種情況,應用程式應該:

  • 確定 pwszDataSourceType 符合參數的 SQL Server 資料類型 (如果寫入 ICommandWithParameters::SetParameterInfo 程式碼的話)。

  • 確定繫結至參數的 DBTYPE 值與參數的 SQL Server 資料類型具有相同的類型 (如果寫入存取子程式碼的話)。

  • 將應用程式編碼成呼叫 ICommandWithParameters::GetParameterInfo,如此提供者就可以用動態方式取得參數的 SQL Server 資料類型。 請注意,這可能會導致與伺服器之間的額外網路往返。

注意

在下列情況下,提供者不支援呼叫 ICommandWithParameters::GetParameterInfo:任何 SQL Server UPDATE 或 DELETE 陳述式包含 FROM 子句、任何 SQL 陳述式取決於包含參數的子查詢、在比較 (like) 或定量述詞的運算式中 SQL 陳述式包含參數標記,或是查詢的其中一個參數為函式參數。 在處理 SQL 陳述式批次時,提供者也不支援針對批次內第一個陳述式之後的陳述式中的參數標記呼叫 ICommandWithParameters::GetParameterInfo。 不允許在 Transact-SQL 命令中使用註解 (/* */)。

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

您不需要在 DBPARAMBINDINFO 結構中指定預存程序參數的名稱。 使用 Null 做為pwszName成員的值,指出 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介面。

另請參閱

命令