パラメーターの値を設定するには、アプリケーションはパラメーターにバインドされた変数の値を設定するだけです。 ステートメントが実行される前に設定されている限り、この値が設定されている場合は重要ではありません。 アプリケーションは、変数をバインドする前または後に値を設定でき、必要に応じて何度でも値を変更できます。 ステートメントが実行されると、ドライバーは単に変数の現在の値を取得します。 これは、準備されたステートメントが複数回実行される場合に特に便利です。アプリケーションは、ステートメントが実行されるたびに、一部またはすべての変数に新しい値を設定します。 この例については、このセクションの「 準備された実行」を参照してください。
SQLBindParameter の呼び出しで長さ/インジケーター バッファーがバインドされている場合は、ステートメントを実行する前に、次のいずれかの値に設定する必要があります。
バインドされた変数内のデータのバイト長。 ドライバーは、変数が文字またはバイナリ (ValueType がSQL_C_CHARまたはSQL_C_BINARY) の場合にのみ、この長さをチェックします。
SQL_NTS。 データは null で終わる文字列です。
SQL_NULL_DATA。 データ値は NULL で、ドライバーはバインドされた変数の値を無視します。
SQL_DATA_AT_EXECまたはSQL_LEN_DATA_AT_EXEC マクロの結果。 パラメーターの値は 、SQLPutData と共に送信されます。 詳細については、このセクションの後半の 「長いデータの送信」を参照してください。
次の表は、バインドされた変数の値と、アプリケーションがさまざまなパラメーター値に設定する長さ/インジケーター バッファーを示しています。
| パラメーター value |
パラメーター (SQL) データ型 |
変数 (C) データ型 |
における値 バインド 変数 |
の値 長さ/指標 バッファー[d] |
|---|---|---|---|---|
| "ABC" | SQL_CHAR | SQL_C_CHAR | ABC\0[a] | SQL_NTSまたは 3 |
| 10 | SQL_INTEGER | SQL_C_SLONG | 10 | -- |
| 10 | SQL_INTEGER | SQL_C_CHAR | 10\0[a] | SQL_NTSまたは 2 |
| 午後 1 時 | SQL_TYPE_TIME | SQL_C_TYPE_TIME | 13,0,0[b] | -- |
| 午後 1 時 | SQL_TYPE_TIME | SQL_C_CHAR | {t '13:00:00'}\0[a], [c] | SQL_NTSまたは 14 |
| ヌル | SQL_SMALLINT | SQL_C_SSHORT | -- | SQL_NULL_DATA |
[a] "\0" は null 終端文字を表します。 null 終端文字は、長さ/インジケーター バッファーの値がSQL_NTS場合にのみ必要です。
[b] このリストの数値は、TIME_STRUCT構造体のフィールドに格納されている数値です。
[c] 文字列は ODBC 日付エスケープ句を使用します。 詳細については、「 日付、時刻、およびタイムスタンプ リテラル」を参照してください。
[d] ドライバーは常にこの値をチェックして、SQL_NULL_DATAなどの特殊な値であるかどうかを確認する必要があります。
実行時にドライバーがパラメーター値を使用して行う処理は、ドライバーに依存します。 必要に応じて、ドライバーは、バインドされた変数の C データ型とバイト長の値を、パラメーターの SQL データ型、有効桁数、および小数点以下桁数に変換します。 ほとんどの場合、ドライバーは値をデータ ソースに送信します。 場合によっては、データ ソースにステートメントを送信する前に、値をテキストとして書式設定し、SQL ステートメントに挿入します。