C 資料類型

ODBC C 資料類型表示用來將資料儲存在應用程式中的 C 緩衝區資料類型。

所有驅動程式都必須支援所有 C 資料類型。 這是必要的,因為所有驅動程式都必須支援可轉換 SQL 類型的所有 C 類型,而且所有驅動程式都支援至少一個字元的 SQL 類型。 因為字元 SQL 類型可以轉換成所有 C 類型,因此所有驅動程式都必須支援所有 C 類型。

C 資料類型是在具有 TargetType 引數的 SQLBindCol 和 SQLGetData 式中指定,並在具有 ValueType 引數的 SQLBindParameter 函式中指定 。 您也可以藉由呼叫 SQLSetDescField 來設定 ARD 或 APD 的SQL_DESC_CONCISE_TYPE欄位,或呼叫 SQLSetDescRec 搭配 Type 引數(如有 需要,請呼叫 SubType 引數),並將 DescriptorHandle 引數設定為 ARD 或 APD 的控制碼。

下表列出 C 資料類型的有效類型識別碼。 資料表也會列出對應至每個識別碼和此資料類型定義的 ODBC C 資料類型。

C 類型識別碼 ODBC C typedef C 類型
SQL_C_CHAR SQLCHAR * unsigned char *
SQL_C_WCHAR SQLWCHAR * wchar_t *
SQL_C_SSHORT[j] SQLSMALLINT short int
SQL_C_USHORT[j] SQLUSMALLINT unsigned short int
SQL_C_SLONG[j] SQLINTEGER long int
SQL_C_ULONG[j] SQLUINTEGER unsigned long int
SQL_C_FLOAT SQLREAL float
SQL_C_DOUBLE SQLDOUBLE、SQLFLOAT double
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR signed char
SQL_C_UTINYINT[j] SQLCHAR unsigned char
SQL_C_SBIGINT SQLBIGINT _int64[h]
SQL_C_UBIGINT SQLUBIGINT unsigned _int64[h]
SQL_C_BINARY SQLCHAR * unsigned char *
SQL_C_BOOKMARK[i] 書簽 unsigned long int[d]
SQL_C_VARBOOKMARK SQLCHAR * unsigned char *
所有 C 間隔資料類型 SQL_INTERVAL_STRUCT 請參閱本附錄稍後的 C 間隔結構 一節。

C 類型識別碼 SQL_C_TYPE_DATE[c]

ODBC C typedef SQL_DATE_STRUCT

C 類型

struct tagDATE_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;    
} DATE_STRUCT;[a]  

C 類型識別碼 SQL_C_TYPE_TIME[c]

ODBC C typedef SQL_TIME_STRUCT

C 類型

struct tagTIME_STRUCT {  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
} TIME_STRUCT;[a]  

C 類型識別碼 SQL_C_TYPE_TIMESTAMP[c]

ODBC C typedef SQL_TIMESTAMP_STRUCT

C 類型

struct tagTIMESTAMP_STRUCT {  
   SQLSMALLINT year;  
   SQLUSMALLINT month;  
   SQLUSMALLINT day;  
   SQLUSMALLINT hour;  
   SQLUSMALLINT minute;  
   SQLUSMALLINT second;  
   SQLUINTEGER fraction;[b]   
} TIMESTAMP_STRUCT;[a]  

C 類型識別碼 SQL_C_NUMERIC

ODBC C typedef SQL_NUMERIC_STRUCT

C 類型

struct tagSQL_NUMERIC_STRUCT {  
   SQLCHAR precision;  
   SQLSCHAR scale;  
   SQLCHAR sign[g];  
   SQLCHAR val[SQL_MAX_NUMERIC_LEN];[e], [f]   
} SQL_NUMERIC_STRUCT;  

C 類型識別碼 SQL_C_GUID

ODBC C typedef SQLGUID

C 類型

struct tagSQLGUID {  
   DWORD Data1;  
   WORD Data2;  
   WORD Data3;  
   BYTE Data4[8];  
} SQLGUID;[k]  

[a] datetime C 資料類型中的年、月、日、小時、分鐘和秒欄位的值必須符合西曆的條件約束。 (請參閱 本附錄稍後的西曆 條件約束。

[b] 分數位段的值是秒數的十億分之一,範圍從 0 到 999,999,999(1 小於 10 億)。 例如,半秒的分數位段值為 500,000,000,000 秒,以 1,000,000 秒為單位的千分之一秒(一毫秒)為 1,000 秒,而十億分之一秒 (一奈秒) 為 1。

[c] 在 ODBC 2 中。 x 、C 日期、時間和時間戳記資料類型是SQL_C_DATE、SQL_C_TIME和SQL_C_TIMESTAMP。

[d] ODBC 3*.x* 應用程式應該使用 SQL_C_VARBOOKMARK,而不是SQL_C_BOOKMARK。 當 ODBC 3*.x* 應用程式與 ODBC 2 搭配運作時。 x 驅動程式,ODBC 3*.x* 驅動程式管理員會將SQL_C_VARBOOKMARK對應至SQL_C_BOOKMARK。

[e] 數位會儲存在 SQL_NUMERIC_STRUCT結構的 val 欄位中做為小結束模式的縮放整數(最左邊的位元組是最小顯著位元組)。 例如,數位 10.001 基底 10,小數位數為 4,會縮放為 100010 的整數。 因為這是十六進位格式的 186AA,SQL_NUMERIC_STRUCT 中的值會是 「AA 86 01 00 00 ...00「,其中包含SQL_MAX_NUMERIC_LEN #define 所定義的位元組數目。

如需SQL_NUMERIC_STRUCT 的詳細資訊 ,請參閱 HOWTO:使用 SQL_NUMERIC_STRUCT 擷取數值資料。

[f] SQL_C_NUMERIC資料類型的有效位數和小數位數位段會用於從應用程式輸入,以及從驅動程式輸出至應用程式。 當驅動程式將數值寫入SQL_NUMERIC_STRUCT時,它會使用它自己的驅動程式特定預設值做為有效位數 欄位的值 ,而且會使用應用程式描述元 (預設值為 0) SQL_DESC_SCALE 欄位中的值。 應用程式可以藉由設定應用程式描述元的SQL_DESC_PRECISION和SQL_DESC_SCALE欄位,為精確度和小數位數提供自己的值。

[g] 如果為正數,則符號欄位為 1,如果為負數,則為 0。

[h] 某些編譯器可能無法提供_int64。

[i] _SQL_C_BOOKMARK已在 ODBC 3*.x* 中淘汰。

[j] _SQL_C_SHORT、SQL_C_LONG和SQL_C_TINYINT已由帶正負號和不帶正負號的類型取代:SQL_C_SSHORT和SQL_C_USHORT、SQL_C_SLONG和SQL_C_ULONG,以及SQL_C_STINYINT和SQL_C_UTINYINT。 應搭配 ODBC 2 使用的 ODBC 3*.x* 驅動程式。 x 應用程式應該支援SQL_C_SHORT、SQL_C_LONG和SQL_C_TINYINT,因為呼叫時,驅動程式管理員會將它們傳遞至驅動程式。

[k] SQL_C_GUID只能轉換成SQL_CHAR或SQL_WCHAR。

本節包含下列主題。

另請參閱

ODBC 中的 C 資料類型