設定參數值
若要設定參數的值,應用程式只會設定繫結至參數的變數值。 設定此值的時機並不重要,只要在執行陳述式之前設定即可。 應用程式可以在繫結變數之前或之後設定值,而且可以視需要多次變更值。 執行陳述式時,驅動程式只會擷取變數的目前值。 當備妥的陳述式執行多次時,這特別有用;應用程式會在每次執行陳述式時,設定部分或所有變數的新值。 如需此範例,請參閱本節稍早的備妥的執行。
如果長度/指標緩衝區已在對 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 陳述式,再將陳述式傳送至資料來源。