次の方法で共有


コマンド パラメーター

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

{call SalesByCategory('Produce', ?)}  

ネットワーク トラフィックを減らすことでパフォーマンスを向上させるために、コマンドを実行する前に ICommandWithParameters::GetParameterInfo または ICommandPrepare::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 データ型と同じ型であることを確認します。

  • プロバイダーがパラメーターの SQL Server データ型を動的に取得できるように、 ICommandWithParameters::GetParameterInfo を呼び出すアプリケーションをコーディングします。 これにより、サーバーへの余分なネットワーク ラウンド トリップが発生します。

プロバイダーは、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::SetParameterInfoの rgParamOrdinals メンバーで指定された序数のみを使用することを示します。 コマンド テキストに名前付きパラメーターと名前なしパラメーターの両方が含まれている場合は、名前付きパラメーターの前にすべての名前のないパラメーターを指定する必要があります。

ストアド プロシージャ パラメーターの名前が指定されている場合、SQL Server Native Client OLE DB プロバイダーは、その名前が有効であることを確認します。 SQL Server Native Client OLE DB プロバイダーは、コンシューマーから誤ったパラメーター名を受け取るとエラーを返します。

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

こちらもご覧ください

コマンド