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


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

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

  • SQLConnect

  • SQLDriverConnect

  • SQLBrowseConnect

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

SQLConnect

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

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

SQLDriverConnect

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

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

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

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

Строка подключения SQLDriverConnect содержит ряд пар ключевое слово-значение, которые указывают все сведения о подключении, поддерживаемые драйвером ODBC. Каждый драйвер поддерживает стандартные ключевые слова ODBC (DSN, FILEDSN, DRIVER, UID, PWD и SAVEFILE) в дополнение к специальным ключевым словам драйвера для указания всей информации о соединении, поддерживаемой драйвером. SQLDriverConnect можно использовать для подключения без источника данных. Например, приложение, предназначенное для подключения "без DSN" к экземпляру 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 Native Client всегда возвращает 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:   01000  
pfNative:   0  
szErrorMsg: "[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 Server (ODBC)