Матрица совместимости
В следующей таблице описывается совместимость типов приложений и драйверов, определенных ранее в этом разделе.
Тип приложения и версия |
32-разрядная версия ODBC Драйвер 2.x |
ODBC 3.x driver |
Драйвер ODBC 3.8 | Драйвер, совместимый с ISO и Open Group |
---|---|---|---|---|
16-разрядное приложение, любая версия | Совместимые | Совместимые | Совместимые | Совместимые |
Чистое приложение 2.x | Совместимые | Совместимые | Совместимые | Несовместимо[3] |
Приложение pure 2.x recompiled | Совместимые | Совместимость[1] | Совместимость[1] | Несовместимо[3] |
Чистое приложение Юникода 2.x | Совместимые | Совместимость[1] | Совместимость[1] | Несовместимо[3] |
Чистое открытое приложение и приложение, совместимое с ISO | Не совместимо | Совместимость[2] | Совместимость[2] | Совместимость[2] |
Чистое приложение 3.0 | Не совместимо | Совместимые | Совместимые | Несовместимо[4] |
Чистое приложение 3.5 | Не совместимо | Совместимые | Совместимые | Несовместимо[4] |
Чистое приложение 3.8 (или более поздней версии) | Несовместимо [5] | Несовместимо [5] | Совместимые | Несовместимо [4] |
Замененное приложение | Совместимые | Совместимые | Совместимые | Несовместимо[3] |
[1] Приложение должно повторно компилировать с помощью заголовков 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, таких как типы данных C для конкретного драйвера в ODBC.
Совместимость диспетчера драйверов
Приложение 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 может использовать функции ODBC 3.8, отличные от типов C, зависящих от драйвера, без указания SQL_OV_ODBC3_80 для SQL_ATTR_ODBC_VERSION. Это похоже на перекомпилированное приложение ODBC 2.x с помощью функций ODBC 3.x.
Использование SQLCancelHandle в приложении, совместимом со всеми диспетчерами драйверов
Так как функция SQLCancelHandle не поддерживается в диспетчерах драйверов, выпущенных до Windows 7, приложение не может быть загружено в более ранних версиях Windows, если он вызывает SQLCancelHandle напрямую. Чтобы работать со всеми версиями диспетчеров драйверов и использовать SQLCancelHandle в новых версиях Windows, приложение должно вызывать SQLCancelHandle косвенно с помощью LoadLibrary и GetProcAddress.