通过


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并将其强制转换为用户定义的数据类型。 从 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,应用程序将调用SQL_ATTR_ODBC_VERSION属性设置为SQL_OV_ODBC3_80SQLSetEnvAttr。 若要确定驱动程序的版本,应用程序使用SQL_DRIVER_ODBC_VER调用 SQLGetInfo

有关 ODBC 3.8 的详细信息,请参阅 ODBC 3.8 中的新增功能。

另请参阅

C 数据类型