ODBC 中的 C 資料類型
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 資料類型。 這可讓您在呼叫 SQLBindColSQLGetData 或 SQLBindParameter 時,將 SQL 類型繫結為 ODBC 應用程式中的驅動程式特定 C 類型。 這很適合用於支援新的伺服器類型,因為現有的 C 資料類型可能無法正確表示新的伺服器資料類型。 使用驅動程式特定的 C 類型可以增加驅動程式可執行的轉換數目。
例如,假設資料庫管理系統 (DBMS) 引進了新的 SQL 類型 DATETIMEOFFSET,以使用時區資訊來表示日期和時間。 ODBC 中沒有對應至 DATETIMEOFFSET 的特定 C 類型。 應用程式必須繫結 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 資料類型應該會在驅動程式文件中說明。
若要指定 3.8 的 ODBC 合規性層級,應用程式會呼叫 SQLSetEnvAttr,並將 SQL_ATTR_ODBC_VERSION 屬性設定為 SQL_OV_ODBC3_80。 若要判斷驅動程式的版本,應用程式會使用 SQL_DRIVER_ODBC_VER 呼叫 SQLGetInfo。
如需 ODBC 3.8 的詳細資訊,請參閱 ODBC 3.8 的新功能。