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


Пример просмотра SQL Server

В следующем примере показано, как SQLBrowseConnect можно использовать для просмотра подключений, доступных с драйвером SQL Server. Во-первых, приложение запрашивает дескриптор подключения:

SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  

Затем приложение вызывает SQLBrowseConnect и указывает драйвер SQL Server, используя описание драйвера, возвращаемое SQLDrivers:

SQLBrowseConnect(hdbc, "DRIVER={SQL Server};", SQL_NTS, BrowseResult,  
                  sizeof(BrowseResult), &BrowseResultLen);  

Так как это первый вызов SQLBrowseConnect, диспетчер драйверов загружает драйвер SQL Server и вызывает функцию SQLBrowseConnect драйвера с теми же аргументами, которые он получил от приложения.

Замечание

Если вы подключаетесь к поставщику источников данных, поддерживающего проверку подлинности Windows, следует указать Trusted_Connection=yes вместо идентификатора пользователя и пароля в строке подключения.

Драйвер определяет, что это первый вызов SQLBrowseConnect и возвращает второй уровень атрибутов подключения: сервер, имя пользователя, пароль, имя приложения и идентификатор рабочей станции. Для атрибута сервера возвращается список допустимых имен серверов. Код возврата из SQLBrowseConnect является SQL_NEED_DATA. Здесь представлена строка результата просмотра:

"SERVER:Server={red,blue,green,yellow};UID:Login ID=?;PWD:Password=?;  
   *APP:AppName=?;*WSID:WorkStation ID=?;"  

Каждое ключевое слово в строке результатов обзора следует двоеточием и одним или несколькими словами до знака равенства. Эти слова — это понятное имя, которое приложение может использовать для создания диалогового окна. Ключевые слова APP и WSID префиксируются звездочкой, что означает, что они являются необязательными. Ключевые слова SERVER, UID и PWD не префиксируются звездочкой; Значения должны быть предоставлены для них в строке следующего запроса обзора. Значение ключевого слова SERVER может быть одним из серверов, возвращаемых SQLBrowseConnect или именем, предоставленным пользователем.

Приложение снова вызывает SQLBrowseConnect , указывая зеленый сервер и пропуская ключевые слова APP и WSID и понятные имена после каждого ключевого слова:

SQLBrowseConnect(hdbc, "SERVER=green;UID=Smith;PWD=Sesame;", SQL_NTS,  
                  BrowseResult, sizeof(BrowseResult), &BrowseResultLen);  

Драйвер пытается подключиться к зеленому серверу. Если происходят некритические ошибки, например, отсутствие пары «ключевое слово-значение», SQLBrowseConnect возвращает состояние SQL_NEED_DATA и остается в том же состоянии, в котором была до возникновения ошибки. Приложение может вызвать SQLGetDiagField или SQLGetDiagRec , чтобы определить ошибку. Если подключение выполнено успешно, драйвер возвращает SQL_NEED_DATA и возвращает строку результата поиска:

"*DATABASE:Database={master,model,pubs,tempdb};  
   *LANGUAGE:Language={us_english,Franais};"  

Поскольку атрибуты в этой строке являются необязательными, приложение может опустить их. Однако приложение должно снова вызвать SQLBrowseConnect . Если приложение решает опустить имя базы данных и язык, оно указывает пустую строку запроса обозрения. В этом примере приложение выбирает базу данных pubs и вызывает SQLBrowseConnect в последнее время, пропуская ключевое слово LANGUAGE и звездочку перед ключевым словом DATABASE :

SQLBrowseConnect(hdbc, "DATABASE=pubs;", SQL_NTS, BrowseResult,  
                  sizeof(BrowseResult), &BrowseResultLen);  

Так как атрибут DATABASE является конечным атрибутом подключения, необходимым драйвером, процесс просмотра завершен, приложение подключено к источнику данных, а SQLBrowseConnect возвращает SQL_SUCCESS. SQLBrowseConnect также возвращает полную строку подключения в виде строки результата обзора:

"DSN=MySQLServer;SERVER=green;UID=Smith;PWD=Sesame;DATABASE=pubs;"  

Окончательная строка подключения, возвращаемая драйвером, не содержит понятных для пользователя имен после каждого ключевого слова, а также не содержит необязательных ключевых слов, не указанных приложением. Приложение может использовать эту строку с SQLDriverConnect для повторного подключения к источнику данных в текущем дескрипторе подключения (после отключения) или для подключения к источнику данных в другом дескрипторе подключения. Рассмотрим пример.

SQLDriverConnect(hdbc, hwnd, BrowseResult, SQL_NTS, ConnStrOut,  
                  sizeof(ConnStrOut), &ConnStrOutLen, SQL_DRIVER_NOPROMPT);