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


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

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

  1. Приложение объявляет переменную типа SQLHDBC. Затем он вызывает SQLAllocHandle и передает адрес этой переменной, дескриптор среды, в которой выделяется соединение, и параметр SQL_HANDLE_DBC. Рассмотрим пример.

    SQLHDBC hdbc1;  
    
    SQLAllocHandle(SQL_HANDLE_DBC, henv1, &hdbc1);  
    
  2. Диспетчер драйверов выделяет структуру, в которой хранятся сведения об инструкции, и возвращает дескриптор подключения в переменную.

Диспетчер драйверов не вызывает SQLAllocHandle в драйвере в настоящее время, так как он не знает, какой драйвер следует вызывать. Он задерживает вызов SQLAllocHandle в драйвере, пока приложение не вызовет функцию для подключения к источнику данных. Дополнительные сведения см. в разделе "Роль диспетчера драйверов" в процессе подключения далее в этом разделе.

Важно отметить, что выделение дескриптора подключения это не то же самое, что и загрузка драйвера. Драйвер не загружается до вызова функции подключения. Таким образом, после выделения дескриптора подключения и перед подключением к драйверу или источнику данных единственными функциями, которые приложение может вызывать с помощью дескриптора подключения, являются SQLSetConnectAttr, SQLGetConnectAttr или SQLGetInfo с параметром SQL_ODBC_VER. Вызов других функций с дескриптором подключения, например SQLEndTran, возвращает SQLSTATE 08003 (подключение не открыто). Полные сведения см. в приложении B: таблицы перехода состояния ODBC.

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