Изменения в поведении и драйверы ODBC 3.x
Атрибут среды, SQL_ATTR_ODBC_VERSION указывает драйверу, должен ли он проявлять поведение ODBC 2.x или поведение ODBC 3.x . Настройка атрибута среды SQL_ATTR_ODBC_VERSION зависит от приложения. Приложения ODBC 3.x должны вызывать SQLSetEnvAttr, чтобы задать этот атрибут после вызова SQLAllocHandle для выделения дескриптора среды и перед вызовом SQLAllocHandle для выделения дескриптора подключения. Если это не удалось сделать, диспетчер драйверов возвращает SQLSTATE HY010 (ошибка последовательности функций) при последнем вызове SQLAllocHandle.
Заметка
Дополнительные сведения об изменениях поведения и действиях приложения см. в разделе "Изменения поведения".
Приложения ODBC 2.x и приложения ODBC 2.x, перекомпилированные с файлами заголовков ODBC 3.x, не вызывают SQLSetEnvAttr. Однако они вызывают SQLAllocEnv вместо SQLAllocHandle для выделения дескриптора среды. Поэтому, когда приложение вызывает SQLAllocEnv в диспетчере драйверов, диспетчер драйверов вызывает SQLAllocHandle и SQLSetEnvAttr в драйвере. Таким образом, драйверы ODBC 3.x всегда могут рассчитывать на заданный атрибут.
Если приложение, соответствующее стандартам, скомпилированному с помощью флага компиляции ODBC_STD вызывает SQLAllocEnv (что может произойти, так как SQLAllocEnv не является устаревшим в ISO), вызов сопоставляется с SQLAllocHandleStd во время компиляции. Во время выполнения приложение вызывает SQLAllocHandleStd. Диспетчер драйверов задает для атрибута среды SQL_ATTR_ODBC_VERSION значение SQL_OV_ODBC3. Вызов SQLAllocHandleStd эквивалентен вызову SQLAllocHandle с помощью HandleType SQL_HANDLE_ENV и вызова SQLSetEnvAttr, чтобы задать SQL_ATTR_ODBC_VERSION значение SQL_OV_ODBC3.
В некоторых архитектурах драйверов драйвер должен отображаться как драйвер ODBC 2.x или драйвер ODBC 3.x в зависимости от подключения. Драйвер в этом случае может не быть драйвером, а слоем, который находится между диспетчером драйверов и другим драйвером. Например, он может имитировать драйвер, например ODBC Spy. В другом примере он может выступать в качестве шлюза, например EDA/SQL. Чтобы отображаться как драйвер ODBC 3.x , такой драйвер должен иметь возможность экспортировать SQLAllocHandle и отображаться как драйвер ODBC 2.x , должен иметь возможность экспортировать SQLAllocConnect, SQLAllocEnv и SQLAllocStmt. При выделении среды, подключения или инструкции диспетчер драйверов проверяет, экспортирует ли этот драйвер SQLAllocHandle. Так как драйвер выполняется, диспетчер драйверов вызывает SQLAllocHandle в драйвере. Если драйвер работает с драйвером ODBC 2.x, драйвер должен сопоставить вызов SQLAllocHandle с SQLAllocConnect, SQLAllocEnv или SQLAllocStmt соответствующим образом. Это также не должно делать ничего с вызовом SQLSetEnvAttr при выполнении в качестве драйвера ODBC 2.x .
Этот раздел содержит следующие подразделы.