設定參數值

若要設定參數的值,應用程式只會設定繫結至參數的變數值。 設定此值的時機並不重要,只要在執行陳述式之前設定即可。 應用程式可以在繫結變數之前或之後設定值,而且可以視需要多次變更值。 執行陳述式時,驅動程式只會擷取變數的目前值。 當備妥的陳述式執行多次時,這特別有用;應用程式會在每次執行陳述式時,設定部分或所有變數的新值。 如需此範例,請參閱本節稍早的備妥的執行

如果長度/指標緩衝區已在對 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 P.M. SQL_TYPE_TIME SQL_C_TYPE_TIME 13,0,0[b] --
1 P.M. 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 終止字元。 只有在長度/指標緩衝區中的值為 SQL_NTS 時,才需要 Null 終止字元。

[b] 此清單中的數值是儲存在 TIME_STRUCT 結構的欄位中數值。

[c] 字串會使用 ODBC 日期逸出子句。 如需詳細資訊,請參閱日期、時間和時間戳記常值

[d] 驅動程式必須一律檢查此值,以查看該值是否為特殊值,例如 SQL_Null_DATA。

驅動程式在執行階段使用參數值的功能與驅動程式相依。 如有必要,驅動程式會將繫結變數的 C 資料類型和位元組長度值轉換為參數 SQL 資料類型、有效位數和小數位數。 在大部分情況下,驅動程式接著會將值傳送至資料來源。 在某些情況下,驅動程式會將值格式化為文字,並將該文字插入 SQL 陳述式,再將陳述式傳送至資料來源。