兼容性矩阵

下表说明了本部分先前所定义的应用程序和驱动程序类型的兼容性。

应用程序类型

和版本
32 位 ODBC

2.x 驱动程序
ODBC 3.x

驱动程序
ODBC 3.8 驱动程序 符合 ISO 和开放组规范的驱动程序
16 位应用程序(任何版本) 兼容 兼容 兼容 兼容
2.x 应用程序 兼容 兼容 兼容 不兼容[3]
2.x 重新编译的应用程序 兼容 兼容[1] 兼容[1] 不兼容[3]
2.x Unicode 应用程序 兼容 兼容[1] 兼容[1] 不兼容[3]
纯符合开放组和 ISO 规范的应用程序 不兼容 兼容[2] 兼容[2] 兼容[2]
纯 3.0 应用程序 不兼容 兼容 兼容 不兼容[4]
纯 3.5 应用程序 不兼容 兼容 兼容 不兼容[4]
纯 3.8(或更高版本)应用程序 不兼容[5] 不兼容[5] 兼容 不兼容[4]
已取代的应用程序 兼容 兼容 兼容 不兼容[3]

[1] 如果应用程序是 Unicode 应用程序,则必须使用包含 UNICODE 选项的 ODBC 3.5(或更高版本)标头重新编译该应用程序,并且必须将 ODBCVER 设置为 0x0250。

[2] 必须使用 ODBC 3.5(或更高版本)标头编译应用程序,并将其与 ODBC 驱动程序管理器链接。 此外,还必须设置标头标志 ODBC_STD。

[3] 此配置可能无法正常工作,因为 ODBC 2.x 中具有不符合标准的功能,例如书签。

[4] 此配置可能无法正常工作,因为 ODBC 3.x 中具有不符合标准的功能,例如书签。

[5] 此配置可能会失败,因为 ODBC 3.8 中具有 ODBC 2.x 或 3.x 驱动程序中没有的功能,例如 ODBC 中特定于应用程序的 C 数据类型

驱动程序管理器的兼容性

必须与所有驱动程序管理器版本一起运行的 ODBC 3.0 应用程序应在启动时执行以下操作:

  • 分配环境句柄。

  • 将 SQL_ATTR_ODBC_VERSION 环境属性设置为 SQL_OV_ODBC3_80。 如果驱动程序管理器返回 SQL_ERROR,则表示驱动程序管理器的版本低于 3.8。 根据需要将 SQL_ATTR_ODBC_VERSION 重置为 SQL_OV_ODBC3 或 SQL_OV_ODBC2,以对应于驱动程序管理器。

  • 分配连接句柄。

  • 建立连接。

  • 为 SQL_DRIVER_ODBC_VER 调用 SQLGetInfo 以确定驱动程序版本。 如果驱动程序是 ODBC 3.8 驱动程序,则可以使用特定于驱动程序的 C 类型。 否则,请勿使用特定于驱动程序的 C 数据类型。

请注意,重新编译的 ODBC 3.x 应用程序可以使用特定于驱动程序的 C 类型以外的 ODBC 3.8 功能,而无需为 SQL_ATTR_ODBC_VERSION 指定 SQL_OV_ODBC3_80。 这类似于使用 ODBC 3.x 功能、经过重新编译的 ODBC 2.x 应用程序。

在与所有驱动程序管理器兼容的应用程序中使用 SQLCancelHandle

由于 Windows 7 之前发布的驱动程序管理器不支持 SQLCancelHandle 函数,因此如果应用程序直接调用 SQLCancelHandle,则无法在较旧版本的 Windows 中加载应用程序。 若要使用所有版本的驱动程序管理器并在新版本的 Windows 上使用 SQLCancelHandle,应用程序应使用 LoadLibraryGetProcAddress 间接调用 SQLCancelHandle

另请参阅

ODBC 3.8 中的新增功能