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。
本節包含下列主題。