Матрица совместимости

В следующей таблице описывается совместимость типов приложений и драйверов, определенных ранее в этом разделе.

Тип приложения

и версия
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.

См. также

Новые возможности ODBC 3.8