下表描述了前面在本部分中定义的应用程序和驱动程序类型的兼容性。
| 应用程序类型 和版本 |
32 位 ODBC 2.x 驱动程序 |
ODBC 3.x driver |
ODBC 3.8 驱动程序 | 符合 ISO 和 Open Group 的驱动程序 |
|---|---|---|---|---|
| 16 位应用程序,任何版本 | 相容 | 相容 | 相容 | 相容 |
| Pure 2.x 应用程序 | 相容 | 相容 | 相容 | 不兼容[3] |
| 纯 2.x 重新编译应用程序 | 相容 | 兼容的[1] | 兼容[1] | 不兼容[3] |
| Pure 2.x Unicode 应用程序 | 相容 | 兼容[1] | 兼容[1] | 不兼容[3] |
| 纯开放组和符合 ISO 的应用程序 | 不兼容 | 兼容[2] | 兼容[2] | 兼容[2] |
| Pure 3.0 应用程序 | 不兼容 | 相容 | 相容 | 不兼容[4] |
| Pure 3.5 应用程序 | 不兼容 | 相容 | 相容 | 不兼容[4] |
| 纯 3.8(或更高版本)应用程序 | 不兼容 [5] | 不兼容 [5] | 相容 | 不兼容 [4] |
| 替换的应用程序 | 相容 | 相容 | 相容 | 不兼容[3] |
[1] 应用程序必须使用具有 UNICODE 选项的 ODBC 3.5(或更高版本)标头重新编译(如果它是 Unicode 应用程序),并且必须将 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,以对应于驱动程序管理器。
分配连接句柄。
建立连接。
调用 SQLGetInfo 获取 SQL_DRIVER_ODBC_VER 以确定驱动程序版本。 如果驱动程序是 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。