Share via


コマンド パラメータ

コマンド テキスト内のパラメータは、疑問符文字でマークされます。たとえば、次の SQL ステートメントでは 1 つの入力パラメータがマークされています。

{call SalesByCategory('Produce', ?)}

ネットワーク トラフィックを削減してパフォーマンスを向上するために、SQL Server Native Client OLE DB プロバイダでは、コマンドの実行前に ICommandWithParameters::GetParameterInfo または ICommandPrepare::Prepare が呼び出されない限り、パラメータ情報の自動抽出は行いません。つまり、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 データ型を動的に取得できるようにします。これにより、ネットワーク上でサーバーとの余分なやり取りが増えることに注意してください。

注意注意

SQL Native Client OLE DB プロバイダでは、FROM 句が含まれている SQL Server UPDATE ステートメントや DELETE ステートメント、パラメータを含むサブクエリに依存する SQL ステートメント、比較の両方の式、LIKE 述部、および定量化された述語内にパラメータ マーカーを含む SQL ステートメント、またはパラメータのいずれかが、関数に対するパラメータになっているクエリの場合は、ICommandWithParameters::GetParameterInfo を呼び出すことはできません。また、SQL ステートメントをバッチ処理する場合、バッチ内の最初のステートメントの後にあるステートメント内のパラメータ マーカーに対して、ICommandWithParameters::GetParameterInfo を呼び出すことはできません。Transact-SQL コマンド内ではコメント (/* */) を使用できません。

SQL Server Native Client OLE DB プロバイダでは、SQL ステートメント コマンドで入力パラメータを使用できます。プロシージャ呼び出しコマンドでは、入力パラメータ、出力パラメータ、および入出力パラメータを使用できます。出力パラメータの値は、実行時 (行セットが返されない場合のみ)、または返されたすべての行セットがアプリケーションによって使用されたときにアプリケーションに返されます。返される値が有効であることを保証するには、IMultipleResults を使用して行セットを強制的に使用します。

ストアド プロシージャ パラメータの名前を DBPARAMBINDINFO 構造体で指定する必要はありません。SQL Server Native Client OLE DB プロバイダでパラメータ名を無視し、ICommandWithParameters::SetParameterInforgParamOrdinals メンバで指定された序数だけを使用する必要があることを示すには、pwszName メンバの値に NULL を使用します。コマンド テキストに名前付きのパラメータと名前のないパラメータの両方が含まれている場合、どの名前付きパラメータよりも前に、名前のないパラメータをすべて指定する必要があります。

ストアド プロシージャ パラメータの名前が指定された場合、SQL Server Native Client OLE DB プロバイダではその名前が妥当かどうかがチェックされます。SQL Server Native Client OLE DB プロバイダでコンシューマから不適切なパラメータ名を受け取ると、エラーが返されます。

注意注意

SQL Server Native Client OLE DB プロバイダには SQL Server XML と UDT (ユーザー定義型) のサポートを公開するために、新しい ISSCommandWithParameters インターフェイスが実装されています。

関連項目

概念