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)」を参照してください。