SQL 到 C:字元
字元 ODBC SQL 資料類型的識別碼如下:
- SQL_CHAR
- SQL_VARCHAR
- SQL_LONGVARCHAR
- SQL_WCHAR
- SQL_WVARCHAR
- SQL_WLONGVARCHAR
下表顯示可轉換 SQL 資料的 ODBC C 資料類型。 如需資料表中資料行和詞彙的說明,請參閱 將資料從 SQL 轉換成 C 資料類型 。
C 類型識別碼 | 測試 | TargetValuePtr | StrLen_or_IndPtr | SQLSTATE |
---|---|---|---|---|
SQL_C_CHAR | 資料 < BufferLength 的位元組長度 位元組長度的資料 > = BufferLength |
資料 截斷的資料 |
以位元組為單位的資料長度 以位元組為單位的資料長度 |
n/a 01004 |
SQL_C_WCHAR | 資料 < BufferLength 的字元長度 資料 > 字元長度 = BufferLength |
資料 截斷的資料 |
以字元為單位的資料長度 以字元為單位的資料長度 |
n/a 01004 |
SQL_C_STINYINT SQL_C_UTINYINT SQL_C_TINYINT SQL_C_SBIGINT SQL_C_UBIGINT SQL_C_SSHORT SQL_C_USHORT SQL_C_SHORT SQL_C_SLONG SQL_C_ULONG SQL_C_LONG SQL_C_NUMERIC | 未截斷的資料轉換[b] 使用小數位數截斷轉換的資料[a] 資料轉換會導致整個數位(與小數數位相反)遺失[a] 資料不是 數值常值 [b] |
資料 截斷的資料 未定義 未定義 |
C 資料類型的位元組數目 C 資料類型的位元組數目 未定義 未定義 |
n/a 01S07 22003 22018 |
SQL_C_FLOAT SQL_C_DOUBLE | 資料位於要轉換數位的資料類型範圍內[a] 資料超出要轉換數位的資料類型範圍[a] 資料不是 數值常值 [b] |
資料 未定義 未定義 |
C 資料類型的大小 未定義 未定義 |
n/a 22003 22018 |
SQL_C_BIT | 資料為 0 或 1 資料大於 0、小於 2 且不等於 1 資料小於 0 或大於或等於 2 資料不是 數值常值 |
資料 截斷的資料 未定義 未定義 |
1[b] 1[b] 未定義 未定義 |
n/a 01S07 22003 22018 |
SQL_C_BINARY | 位元組長度的資料 < = BufferLength 資料 > BufferLength 的位元組長度 |
資料 截斷的資料 |
以位元組為單位的資料長度 資料長度 |
n/a 01004 |
SQL_C_TYPE_DATE | 資料值是有效的 date-value [a] 資料值是有效的 時間戳記值 ;時間部分為零[a] 資料值是有效的 時間戳記值 ;時間部分為非零[a],[c] 資料值不是有效的 date-value 或 timestamp-value [a] |
資料 資料 截斷的資料 未定義 |
6[b] 6[b] 6[b] 未定義 |
n/a n/a 01S07 22018 |
SQL_C_TYPE_TIME | 資料值是有效的 時間值,而小數秒值為 0 [a] 資料值是有效的 時間戳記值或有效的時間值 ;小數秒部分為零[a],[d] 資料值是有效的 timestamp-value ;小數秒部分為 nonzero[a],[d],[e] 資料值不是有效的 時間值 或 timestamp-value [a] |
資料 資料 截斷的資料 未定義 |
6[b] 6[b] 6[b] 未定義 |
n/a n/a 01S07 22018 |
SQL_C_TYPE_TIMESTAMP | 資料值是有效的 時間戳記值或有效的時間值 ;小數秒部分未截斷[a] 資料值是有效的 時間戳記值或有效的時間值 ;小數秒部分已截斷[a] 資料值是有效的 date-value [a] 資料值是有效的 時間值 [a] 資料值不是有效的 date-value 、 time-value 或 timestamp-value [a] |
資料 截斷的資料 Data[f] Data[g] 未定義 |
16[b] 16[b] 16[b] 16[b] 未定義 |
n/a 01S07 n/a n/a 22018 |
所有 C 間隔類型 | 資料值是有效的 間隔值 ;沒有截斷 資料值是有效的 間隔值 ;截斷一或多個尾端欄位 資料是有效的間隔;前置欄位顯著精確度遺失 資料值不是有效的間隔值 |
資料 截斷的資料 未定義 未定義 |
以位元組為單位的資料長度 以位元組為單位的資料長度 未定義 未定義 |
n/a 01S07 22015 22018 |
[a] 這個轉換會忽略 BufferLength 的值 。 驅動程式假設 * TargetValuePtr 的大小是 C 資料類型的大小。
[b] 這是對應 C 資料類型的大小。
[c] 時間戳記值 的時間部分 會截斷。
[d] 會忽略 timestamp-value 的 日期部分。
[e] 時間戳記的小數秒部分會截斷。
[f] 時間戳記結構的時間欄位會設定為零。
[g] 時間戳記結構的日期欄位會設定為目前的日期。
額外空間
當 SQL 字元資料轉換成下列任何類型時,會忽略前置和尾端空格:
- date
- numeric
- time
- timestamp
- interval C 資料