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 資料