ODBC 中的 C 数据类型

ODBC 定义应用程序变量使用的 C 数据类型及其相应的类型标识符。 这些由绑定到结果集列和语句参数的缓冲区使用。 例如,假设应用程序想要以字符格式从结果集列中检索数据。 它声明具有 SQLCHAR * 数据类型的变量,并将此变量绑定到结果集列,其类型标识符为 SQL_C_CHAR。 有关 C 数据类型和类型标识符的完整说明,请参阅“附录 D:数据类型”

ODBC 还定义了从每个 SQL 数据类型到 C 数据类型的默认映射。 例如,数据源中的 2 字节整数映射到应用程序中的 2 字节整数。 若要使用默认映射,应用程序会指定 SQL_C_DEFAULT 类型标识符。 但是,出于互操作性原因,不建议使用此标识符。

ODBC 1.x 中定义的所有整数 C 数据类型都已签名。 在 ODBC 2.0 中添加了未签名的 C 数据类型及其相应的类型标识符。 因此,处理 1.x 版本时,应用程序和驱动程序需要特别小心。

C 数据类型扩展性

在 ODBC 3.8 中,可以指定特定于驱动程序的 C 数据类型。 这使您能够在调用 SQLBindColSQLGetDataSQLBindParameter 时将 SQL 类型绑定为 ODBC 应用程序中特定于驱动程序的 C 类型。 这对于支持新服务器类型非常有用,因为现有的 C 数据类型可能无法正确表示新的服务器数据类型。 使用特定于驱动程序的 C 类型可以增加驱动程序可执行的转换数。

例如,假设数据库管理系统 (DBMS) 引入了新的 SQL 类型 DATETIMEOFFSET,以便用时区信息表示日期和时间。 在 ODBC 中没有对应于 DATETIMEOFFSET 的特定 C 类型。 应用程序必须将 DATETIMEOFFSET 绑定为 SQL_C_BINARY 并将其强制转换为用户定义的数据类型。 从具有 C 数据类型扩展性的 ODBC 3.8 开始,驱动程序可以定义新的相应 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 中的新增功能”。

另请参阅

C 数据类型