次の方法で共有


パラメーターの値の設定

パラメーターの値を設定するには、アプリケーションはパラメーターにバインドされた変数の値を設定するだけです。 ステートメントが実行される前に設定されていれば、この値がいつ設定されているかは重要ではありません。 アプリケーションは、変数をバインドする前でも後でも値を設定でき、必要に応じて何度でも値を変更できます。 ステートメントが実行されると、ドライバーは変数の現在の値を取得するだけです。 これは、準備されたステートメントが複数回実行される場合に特に便利です。アプリケーションは、ステートメントが実行されるたびに、一部またはすべての変数に新しい値を設定します。 この例については、このセクション前半の「準備された実行」を参照してください。

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 ステートメントに挿入します。