コマンド パラメーター
コマンド テキスト内のパラメーターは、疑問符文字でマークされます。 たとえば、次の 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::SetParameterInfo の rgParamOrdinals メンバーで指定された序数だけを使用する必要があることを示すには、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 インターフェイスが実装されています。 |