ODBC 定義了應用變數所使用的 C 資料型態及其對應型別識別碼。 綁定到結果集欄位和語句參數的緩衝區會使用這些資料。 例如,假設一個應用程式想從結果集欄位中以字元格式檢索資料。 它宣告一個 SQLCHAR * 資料型別的變數,並將此變數綁定到結果集欄位,型別識別碼為 SQL_C_CHAR。 欲了解完整的 C 資料型態與型別識別碼清單,請參見 附錄 D:資料型別。
ODBC 也定義了每個 SQL 資料型態對應 C 型態的預設映射。 例如,資料來源中的 2 位元組整數會映射到應用程式中的 2 位元組整數。 要使用預設映射,應用程式會指定SQL_C_DEFAULT類型識別碼。 然而,基於互通性考量,不建議使用此識別碼。
ODBC 1.x 定義的所有整數 C 資料型別皆有簽名。 未標記的 C 資料型態及其對應型別識別碼則在 ODBC 2.0 中加入。 因此,應用程式和驅動程式在處理 1.x 版本時必須特別小心。
C 資料型態擴充性
在 ODBC 3.8 中,你可以指定驅動程式專屬的 C 資料型態。 這讓你在 ODBC 應用程式中,能將 SQL 型別綁定為驅動程式專用的 C 型別,當你呼叫 SQLBindCol、 SQLGetData 或 SQLBindParameter 時。 這對於支援新的伺服器類型很有用,因為現有的 C 資料型態可能無法正確表示新的伺服器資料型態。 使用驅動程式專屬的 C 類型可以增加驅動程式可執行的轉換次數。
舉例來說,假設資料庫管理系統(DBMS)引入了一個新的 SQL 類型 DATETIMEOFFSET,用以表示帶有時區資訊的日期和時間。 ODBC 中不會有特定的 C 類型對應 DATETIMEOFFSET。 應用程式必須將 DATETIMEOFFSET 綁定為 SQL_C_BINARY,並將其投射為使用者定義的資料型態。 從 ODBC 3.8 開始,具備 C 資料型態擴充性,驅動程式可以定義新的對應 C 類型。 例如,對於新的 SQL 類型 DATETIMEOFFSET,驅動程式可以定義一個新的對應 C 類型,例如 SQL_C_DATETIMEOFFSET。 接著,應用程式可以將新的 SQL 型別綁定為驅動程式專屬的 C 型別。
驅動程式中定義了 C 資料型別如下:
應用程式、ODBC 驅動程式及驅動管理員的 ODBC 合規等級為 3.8(或更高)。
驅動程式專用的 C 型態資料範圍介於 0x4000 到 0x7FFF。
驅動程式定義對應 C 類型的資料結構。 這可以在驅動程式專屬的 SDK 中完成。
驅動程式管理器不會驗證定義在 0x4000 和 0x7FFF 範圍內的 C 類型;驅動程式會執行驗證及資料型別轉換。 但如果傳遞給驅動程式管理員的 C 類型資料範圍介於 0x0000 與 0x3FFF 或 0x8000 與 0xFFFF 之間,驅動程式管理員會驗證該 C 資料型態。
備註
驅動程式專屬的 C 資料型別應在驅動程式文件中說明。
若要指定 ODBC 合規等級為 3.8,應用程式呼叫 SQLSetEnvAttr ,並將 SQL_ATTR_ODBC_VERSION 屬性設為 SQL_OV_ODBC3_80。 為了確定驅動程式的版本,應用程式會呼叫帶有 SQL_DRIVER_ODBC_VER 的 SQLGetInfo 。
欲了解更多 ODBC 3.8 資訊,請參閱 ODBC 3.8 的最新資訊。