行为更改

行为更改指的是接口的语法保持不变,但语义已更改。 由于这些更改,ODBC 2.x 使用的功能与 ODBC 3.x 中使用的相同功能,行为会有所不同。

根据 SQL_ATTR_ODBC_VERSION 环境属性确定应用程序是表现出 ODBC 2.x 行为还是 ODBC 3.x 行为。 此 32 位值设置为 SQL_OV_ODBC2 时会表现出 ODBC 2.x 行为,设置为 SQL_OV_ODBC3 则表现出 ODBC 3.x 行为。

SQL_ATTR_ODBC_VERSION 环境属性是通过调用 SQLSetEnvAttr 设置的。 在应用程序调用 SQLAllocHandle 以分配环境句柄后,必须立即调用 SQLSetEnvAttr 来设置其所表现的行为。 (因此,有一个新的环境状态可用来描述已分配但无版本状态的环境句柄。)有关详细信息,请参阅附录 B:ODBC 状态转换表

应用程序会声明其使用 SQL_ATTR_ODBC_VERSION 环境属性所表现出的行为,但该属性对应用程序是连接 ODBC 2.x 还是 ODBC 3.x 没有影响。 ODBC 3.x 应用程序可以连接到 ODBC 2.x 或 3.x 驱动程序,无论环境属性的设置如何。

ODBC 3.x 应用程序不应调用 SQLAllocEnv。 因此,如果驱动程序管理器收到对 SQLAllocEnv 的调用,则会将该应用程序识别为ODBC 2.x 应用程序。

SQL_ATTR_ODBC_VERSION 属性会影响 ODBC 3.x 驱动程序行为的三个不同的方面:

  • SQLSTATEs

  • 日期、时间和时间戳的数据类型

  • SQLTables 中的 CatalogName 参数接受 ODBC 3.x 中的搜索模式,但不接受 ODBC 2.x 中的搜索模式

SQL_ATTR_ODBC_VERSION 环境属性的设置不会影响 SQLSetParamSQLBindParamSQLColAttribute 也不受此位的影响。 尽管 SQLColAttribute 会返回受 ODBC 版本(日期类型、精度、小数位数和长度)影响的属性,但预期行为由 FieldIdentifier 参数的值确定。 当 FieldIdentifier 等于 SQL_DESC_TYPE 时,SQLColAttribute 返回日期、时间和时间戳的 ODBC 3.x 代码;当 FieldIdentifier 等于 SQL_COLUMN_TYPE 时,SQLColAttribute 返回日期、时间和时间戳的 ODBC 2.x 代码。

本部分包含以下主题。