Соединение с источником данных (ODBC)

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

  • SQLConnect

  • SQLDriverConnect

  • SQLBrowseConnect

Дополнительные сведения о том, как установить соединение с источником данных, включая различные доступные параметры строки соединения, см. в разделе Использование ключевых слов строки соединения с собственным клиентом SQL Server.

SQLConnect

Функция SQLConnect является простейшей функцией соединения. Она принимает три параметра: имя источника данных, идентификатор пользователя и пароль. Функция SQLConnect используется, если эти три параметра содержат всю информацию, которая необходима для соединения с базой данных. Для установки соединения с базой данных создайте список источников данных при помощи функции SQLDataSources; укажите пользователя для источника данных, идентификатор пользователя и пароль, а затем вызовите функцию SQLConnect.

Функция SQLConnect предполагает, что указание имени источника данных, идентификатора пользователя и пароля достаточно для соединения с источником данных и что источник данных ODBC содержит все другие необходимые сведения, которые необходимы драйверу ODBC для создания соединения. В отличие от функций SQLDriverConnect и SQLBrowseConnect функция SQLConnect не использует строку соединения.

SQLDriverConnect

Функция SQLDriverConnect используется, когда кроме указания имени источника данных, идентификатора пользователя и пароля требуются и другие сведения. Одним из параметров функции SQLDriverConnect является строка соединения, содержащая специфическую для драйвера информацию. Можно использовать функцию SQLDriverConnect вместо SQLConnect для следующих целей:

  • Для указания специфической для драйвера информации во время подключения.

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

  • Для соединения без использования источника данных ODBC.

Строка соединения функции SQLDriverConnect содержит ряд пар типа "ключевое слово-значение", в котором указана вся информация о соединении, поддерживаемая драйвером ODBC. Каждый драйвер поддерживает стандартные ключевые слова ODBC (DSN, FILEDSN, DRIVER, UID, PWD и SAVEFILE) в дополнение к специальным ключевым словам драйвера для указания всей информации о соединении, поддерживаемой драйвером. Функцию SQLDriverConnect можно использовать для соединения без источника данных. Например, приложение, созданное для соединения типа "DSN-less" с экземпляром SQL Server может вызвать функцию SQLDriverConnect со строкой соединения, содержащей идентификатор входа, пароль, сетевую библиотеку, имя сервера, с которым необходимо создать соединение, и используемую базу данных по умолчанию.

При использовании функции SQLDriverConnect существуют два параметра для запроса к пользователю любой необходимой для соединения информации:

  • Диалоговое окно приложения

    Можно создать диалоговое окно приложения, которое запросит информацию о соединении, а затем вызовет функцию SQLDriverConnect с дескриптором окна, равным NULL, и значением параметра DriverCompletion, равным SQL_DRIVER_NOPROMPT. Эти параметры предотвращают открытие драйвером ODBC собственного диалогового окна. Этот метод используется, когда важно управлять пользовательским интерфейсом приложения.

  • Диалоговое окно драйвера

    Можно настроить приложение передавать допустимый дескриптор окна в функцию SQLDriverConnect и устанавливать параметр DriverCompletion в значение SQL_DRIVER_COMPLETE, SQL_DRIVER_PROMPT или SQL_DRIVER_COMPLETE_REQUIRED. Затем драйвер генерирует диалоговое окно для получения от пользователя информации о соединении. Этот метод упрощает код приложения.

SQLBrowseConnect

Функция SQLBrowseConnect, как и функция SQLDriverConnect, использует строку соединения. Однако, при помощи функции SQLBrowseConnect приложение может создать полную строку соединения, которая взаимодействует с источником данных во время выполнения. Это позволяет приложению:

  • Строить собственные диалоговые окна для запроса этой информации, сохраняя таким образом управление своим пользовательским интерфейсом.

  • Просматривать систему на наличие источников данных, которые может использовать конкретный драйвер, возможно на нескольких шагах.

    Например, пользователь может сначала просмотреть серверы в сети, и после выбора сервера, просмотреть базы данных сервера доступные посредством драйвера.

После завершения удачного соединения функция SQLBrowseConnect возвращает строку соединения, которую можно использовать при последующих вызовах функции SQLDriverConnect.

Драйвер ODBC для собственного клиента SQL Server всегда возвращает значение SQL_SUCCESS_WITH_INFO на удачный вызов функции SQLConnect, SQLDriverConnect или SQLBrowseConnect. Когда приложение ODBC вызывает функцию SQLGetDiagRec после получения SQL_SUCCESS_WITH_INFO, могут быть получены следующие сообщения:

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

  • 5703
    Обозначает язык, используемый на сервере.

В следующих примерах показано сообщение, которое возвращается системным администратором на успешное соединение:

szSqlState = "01000", *pfNativeError = 5701,szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]       Changed database context to 'pubs'."szSqlState = "01000", *pfNativeError = 5703,szErrorMsg="[Microsoft][SQL Server Native Client][SQL Server]       Changed language setting to 'us_english'."

Можно не обрабатывать сообщения 5701 и 5703; они всего лишь информационные. Однако, не следует пропускать код возврата SQL_SUCCESS_WITH_INFO, так как сообщения, отличные от 5701 и 5703, могут быть возвращены. Например, если драйвер соединяется с сервером, на котором запущен экземпляр SQL Server с устаревшим каталогом хранимых процедур, одной из ошибок, возвращаемых функцией SQLGetDiagRec после SQL_SUCCESS_WITH_INFO является:

SqlState:   01000pfNative:   0szErrorMsg: "[Microsoft][SQL Server Native Client]The ODBC            catalog stored procedures installed on server            my65server are version 06.50.0193; version 07.00.0205            or later is required to ensure proper operation.            Please contact your system administrator."

Функция обработки ошибок приложения для соединений SQL Server должна вызывать функцию SQLGetDiagRec до тех пор, пока она не вернет SQL_NO_DATA. Затем она должна реагировать на любые сообщения, отличные от сообщений с кодом pfNative, равным 5701 или 5703.

Проверка состояний соединения

Поведение SQL_ATTR_CONNECTION_DEAD и SQL_COPT_SS_CONNECTION_DEAD в SQL Server 2000 и более поздних версиях отличается от поведения в более ранних версиях. В SQL Server 2000 и более поздних SQL_ATTR_CONNECTION_DEAD возвращает самое обычное состояние соединения, которое может не быть текущим состоянием соединения. Однако, SQL_COPT_SS_CONNECTION_DEAD всегда запрашивает у сетевой библиотеки текущее состояние соединения.

Чтобы различать эти поведения SQL_COPT_SS_CONNECTION_DEAD дано новое значение во включаемых файлах SQL Server 2000 и более поздних. Приложения, которые используют этот атрибут, построенные при помощи SQL Server 2000 и более поздних заголовков, завершится с ошибкой (HY092, Недопустимый идентификатор атрибута/параметра), если приложения запускаются с использованием драйвера SQL Server версии 7.0. Данным приложениям рекомендуется проверять версию используемого драйвера перед вызовом функции SQLGetConnectAttr, а затем использовать SQL_ATTR_CONNECTION_DEAD вместо SQL_COPT_SS_CONNECTION_DEAD, если приложение запускается с драйвером SQL Server 7.0.

См. также

Основные понятия