パラメーターの値の設定
パラメーターの値を設定するには、アプリケーションはパラメーターにバインドされた変数の値を設定するだけです。 ステートメントが実行される前に設定されていれば、この値がいつ設定されているかは重要ではありません。 アプリケーションは、変数をバインドする前でも後でも値を設定でき、必要に応じて何度でも値を変更できます。 ステートメントが実行されると、ドライバーは変数の現在の値を取得するだけです。 これは、準備されたステートメントが複数回実行される場合に特に便利です。アプリケーションは、ステートメントが実行されるたびに、一部またはすべての変数に新しい値を設定します。 この例については、このセクション前半の「準備された実行」を参照してください。
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 で送信されます。 詳細については、このセクション後半の「長いデータの送信」を参照してください。
次の表は、さまざまなパラメーター値に対してアプリケーションが設定するバインドされた変数と、長さ/インジケーター バッファーの値を示しています。
パラメーター 値 |
パラメーター (SQL) データ型 (data type) |
変数 (C) データ型 (data type) |
の値 境界のある 変数 |
の値 長さ/インジケーター バッファー[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 |
NULL | 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 ステートメントに挿入します。