共用方式為


C 資料類型

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

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

C 數據類型是在 sqlBindCol 中指定,並使用 TargetType 自變數,以及在具有 ValueType 自變數的 SQLBindParameter 函式中指定 SQLGetData 函式。 您也可以呼叫 SQLSetDescField 來指定它,以設定 ARD 或 APD 的SQL_DESC_CONCISE_TYPE字段, 或藉由使用 Type 自變數呼叫 SQLSetDescRec ,以及視需要呼叫 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
SQL_C_DOUBLE SQLDOUBLE、SQLFLOAT
SQL_C_BIT SQLCHAR unsigned char
SQL_C_STINYINT[j] SQLSCHAR 帶正負號的字元
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 數據類型