SQLBindParameter
SQL Server Native Client ODBC ドライバ用にデータを提供するときに SQLBindParameter を使用すると、データ変換の負荷がなくなるため、アプリケーションのクライアント コンポーネントとサーバー コンポーネントのパフォーマンスがどちらも大幅に向上します。その他に、概数データ型を挿入または更新するときに有効桁数を失うことが少なくなるという利点もあります。
注意 |
---|
char 型と wchar 型のデータを image 型の列に挿入するときは、バイナリ形式に変換後のデータのサイズではなく、渡すデータのサイズを使用します。 |
パラメータ配列の配列要素の 1 つで SQL Server Native Client ODBC ドライバ エラーが発生しても、残りの配列要素に対しては引き続きステートメントが実行されます。アプリケーションがこのステートメントのパラメータ状態要素の配列をバインドした場合は、その配列を基にして、エラーが発生したパラメータ行を特定できます。
SQL Server Native Client ODBC ドライバを使用する場合は、入力パラメータのバインド時に SQL_PARAM_INPUT を指定します。OUTPUT キーワードで定義されたストアド プロシージャ パラメータをバインドするときは、SQL_PARAM_OUTPUT または SQL_PARAM_INPUT_OUTPUT のみを指定してください。
ステートメントの実行時に、バインドされたパラメータ配列の配列要素でエラーが発生した場合、SQL Server Native Client ODBC ドライバの SQLRowCount は信頼できません。また、ODBC ステートメント属性 SQL_ATTR_PARAMS_PROCESSED_PTR は、エラーが発生する前に処理された行数を報告します。その後、必要に応じてパラメータ状態配列全体をアプリケーションで調査することにより、正常に実行されたステートメント数を検出できます。
SQL 文字型のパラメータのバインド
SQL データ型が文字型で渡される場合、ColumnSize は文字単位のサイズです (バイト単位ではありません)。データ文字列の長さ (バイト単位) が 8000 を超えている場合、ColumnSize は SQL_SS_LENGTH_UNLIMITED に設定する必要があります。これは SQL 型のサイズに制限がないことを示します。
たとえば、SQL データ型が SQL_WVARCHAR である場合、ColumnSize は 4000 を超えないようにする必要があります。実際のデータ長が 4000 を超えている場合は、ドライバで nvarchar(max) が使用されるように ColumnSize を SQL_SS_LENGTH_UNLIMITED に設定する必要があります。
SQLBindParameter とテーブル値パラメータ
テーブル値パラメータは、他のパラメータの型と同様、SQLBindParameter によってバインドされます。
テーブル値パラメータがバインドされた後、そのパラメータの列もバインドされます。列をバインドするには、SQLSetStmtAttr を呼び出して、SQL_SOPT_SS_PARAM_FOCUS にテーブル値パラメータの序数を設定します。次に、テーブル値パラメータの各列に対して SQLBindParameter を呼び出します。最上位パラメータ バインドに戻るには、SQL_SOPT_SS_PARAM_FOCUS に 0 を設定します。
テーブル値パラメータの記述子フィールドへのパラメータのマッピングの詳細については、「テーブル値パラメータおよび列の値のバインドとデータ転送」を参照してください。
テーブル値パラメータの詳細については、「テーブル値パラメータ (ODBC)」を参照してください。
SQLBindParameter による機能強化された日付と時刻のサポート
日付型または時刻型のパラメータ値は、「C から SQL への変換」で説明されているように変換されます。対応する構造体 (SQL_SS_TIME2_STRUCT と SQL_SS_TIMESTAMPOFFSET_STRUCT) が使用される場合、time 型と datetimeoffset 型のパラメータでは、ValueType が SQL_C_DEFAULT または SQL_C_BINARY として指定されている必要があります。
詳細については、「日付/時刻の強化 (ODBC)」を参照してください。
SQLBindParameter による大きな CLR UDT のサポート
SQLBindParameter は、大きな CLR ユーザー定義型 (UDT) をサポートしています。詳細については、「大きな CLR ユーザー定義型 (ODBC)」を参照してください。