Поделиться через


Обновление драйвера с версии 3.5 до 3.8

В этом разделе приведены рекомендации и рекомендации по обновлению драйвера ODBC 3.5 до драйвера ODBC 3.8.

Номера версий

Следующие рекомендации относятся к номерам версий:

  • Драйвер должен поддерживать SQL_OV_ODBC3_80 для SQL_ATTR_ODBC_VERSION, возвращая SQL_ERROR для значений, отличных от SQL_OV_ODBC2, SQL_OV_ODBC3 и SQL_OV_ODBC3_80. В будущих версиях диспетчера драйверов предполагается, что драйвер поддерживает уровень соответствия ODBC, если драйвер возвращает SQL_SUCCESS из функции SQLSetEnvAttr.

  • Драйвер версии 3.8 должен возвращать 03.80 из SQLGetInfo при передаче SQL_DRIVER_ODBC_VER в InfoType. Однако старые диспетчеры драйверов, которые были включены в более ранние версии Microsoft Windows, будут рассматривать драйвер как драйвер версии 3.5 и выдавать предупреждение.

    В Windows 7 диспетчер драйверов версии 03.80. В Windows 8 диспетчер драйверов версии 03.81 через SQL_DM_VER SQLGetInfo (параметр InfoType ). SQL_ODBC_VER сообщает версию как 03.80 в Windows 7 и Windows 8.

Типы данных C для конкретного драйвера

Драйвер может настроить типы данных C при работе с приложением ODBC версии 3.8. (Дополнительные сведения см. в разделе Типы данных C в ODBC.) Однако для драйвера версии 3.8 не требуется реализовать любые типы C, зависящие от драйвера. Но драйвер по-прежнему должен выполнять проверку диапазона типов C; Диспетчер драйверов не будет делать это для 3.8 драйверов. Чтобы упростить разработку драйверов, значение конкретного драйвера, тип данных C можно определить в следующем формате:

SQL_DRIVER_C_TYPE_BASE+0, SQL_DRIVER_C_TYPE_BASE+1  
Типы данных для конкретного драйвера, типы дескрипторов, типы сведений, типы диагностики и атрибуты

При разработке нового драйвера следует использовать диапазон, зависящий от драйвера, для типов данных, дескрипторов, типов сведений, типов диагностики и атрибутов. Диапазоны для конкретного драйвера и их базовые значения типов рассматриваются в типах данных для конкретного драйвера, дескрипторах, типах сведений, типах диагностики и атрибутах.

Объединение подключений в пул

Для улучшения управления пулом подключений ODBC 3.8 представляет атрибут подключения SQL_ATTR_RESET_CONNECTION в SQLSetConnectAttr. SQL_RESET_CONNECTION_YES является единственным допустимым значением этого атрибута. SQL_ATTR_RESET_CONNECTION устанавливается непосредственно перед тем, как диспетчер драйверов помещает подключение в пул подключений, что позволяет драйверу сбрасывать другие атрибуты подключения к их значениям по умолчанию.

Чтобы избежать ненужного взаимодействия с сервером, драйвер может отложить сброс атрибута подключения до следующего взаимодействия с удаленным сервером после повторного использования подключения из пула.

Обратите внимание, что SQL_ATTR_RESET_CONNECTION используется только в обмене данными между диспетчером драйверов и драйвером. Приложение не может задать этот атрибут напрямую. Все драйверы версии 3.8 должны реализовать этот атрибут подключения.

Потоковые выходные параметры

ODBC версии 3.8 содержит потоковые выходные параметры, более масштабируемый способ получения выходных параметров. (Дополнительные сведения см. в разделе Получение выходных параметров с помощью SQLGetData.) Для поддержки этой функции драйвер должен задать SQL_GD_OUTPUT_PARAMS в возвращаемом значении, если SQL_GETDATA_EXTENSIONS является InfoType в вызове SQLGetInfo . Поддержка типа SQL с потоковыми выходными параметрами должна быть реализована в драйвере. Диспетчер драйверов не создаст ошибку для недопустимого типа SQL. Типы SQL, поддерживающие потоковые выходные параметры, определены в драйвере.

Драйвер должен возвращать SQL_ERROR, если приложение использовало SQLGetData для получения параметра, который не совпадает с параметром, возвращаемым SQLParamData.

Асинхронное выполнение для операций подключения (метод опроса)

Драйвер может включить асинхронную поддержку различных операций подключения.

Начиная с Windows 7 ODBC поддерживает метод опроса (дополнительные сведения см. в статье "Асинхронное выполнение" (метод опроса). Для драйвера ODBC версии 3.8 не требуется реализовать асинхронные операции с дескрипторами подключения. Даже если драйвер не реализует асинхронные операции с дескрипторами подключения, драйвер по-прежнему должен реализовать SQL_ASYNC_DBC_FUNCTIONS InfoType и вернуть SQL_ASYNC_DBC_NOT_CAPABLE.

Если включены асинхронные операции подключения, время выполнения операции подключения — общее время всех повторяющихся вызовов. Если последний повторяющийся вызов происходит после того, как общее время превысило значение, заданное атрибутом подключения SQL_ATTR_CONNECTION_TIMEOUT, и операция не завершена, драйвер возвращает SQL_ERROR и записывает запись диагностики с помощью SQLState HYT01 и сообщение "Истекло время ожидания подключения". Если операция завершится, время ожидания отсутствует.

Функция SQLCancelHandle

ODBC 3.8 поддерживает функцию SQLCancelHandle, которая используется для отмены операций подключения и инструкций. Драйвер, поддерживающий SQLCancelHandle , должен экспортировать функцию. Драйвер не должен отменять синхронную или асинхронную функцию подключения, которая выполняется, если приложение вызывает SQLCancel или SQLCancelHandle в дескрипторе инструкции. Аналогичным образом драйвер не должен отменять синхронную или асинхронную функцию инструкции, которая выполняется, если приложение вызывает SQLCancelHandle в дескрипторе подключения. Кроме того, драйвер не должен отменить операцию просмотра (SQLBrowseConnect возвращает SQL_NEED_DATA), если приложение вызывает SQLCancelHandle в дескрипторе подключения. В этих случаях драйвер должен возвращать HY010, "ошибка последовательности функций".

Одновременно не требуется поддерживать как sqlCancelHandle, так и асинхронные операции подключения. Драйвер может поддерживать асинхронные операции подключения, но не SQLCancelHandle или наоборот.

Приостановленные подключения

Диспетчер драйверов ODBC 3.8 может поместить подключение в приостановленное состояние. Приложение вызовет SQLDisconnect для выпуска ресурсов, связанных с подключением. В этом случае драйвер должен попытаться освободить максимальное количество ресурсов, не проверяя состояние подключения. Дополнительные сведения о приостановленном состоянии см. в разделе "Функция SQLEndTran".

Организация пулов соединений с учетом драйвера

ODBC в Windows 8 позволяет драйверам настраивать поведение пула подключений. Дополнительные сведения см. в разделе "Пул подключений с поддержкой драйверов".

Асинхронное выполнение (метод уведомления)

ODBC 3.8 поддерживает метод уведомлений для асинхронных операций, доступный начиная с Windows 8. Дополнительные сведения см. в разделе "Асинхронное выполнение" (метод уведомления).

См. также

Разработка драйвера ODBC
Драйверы ODBC, предоставляемые корпорацией Майкрософт
Новые возможности ODBC 3.8