兼容性矩阵
下表说明了本部分先前所定义的应用程序和驱动程序类型的兼容性。
应用程序类型 和版本 |
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,应用程序应使用 LoadLibrary 和 GetProcAddress 间接调用 SQLCancelHandle。