Sdílet prostřednictvím


Příklad procházení SQL Serveru

Následující příklad ukazuje, jak se sqlBrowseConnect může použít k procházení připojení dostupných s ovladačem pro SQL Server. Nejprve aplikace požádá o popisovač připojení:

SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  

Dále aplikace volá SQLBrowseConnect a určuje ovladač SQL Serveru pomocí popisu ovladače vrácené sqlDrivers:

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

Vzhledem k tomu, že se jedná o první volání SQLBrowseConnect, správce ovladačů načte ovladač SQL Serveru a zavolá funkci SQLBrowseConnect ovladače se stejnými argumenty, které přijala z aplikace.

Poznámka:

Pokud se připojujete k poskytovateli zdroje dat, který podporuje ověřování systému Windows, měli byste místo ID uživatele a informací o hesle zadat Trusted_Connection=yes v připojovacím řetězci.

Ovladač určuje, že se jedná o první volání SQLBrowseConnect a vrátí druhou úroveň atributů připojení: server, uživatelské jméno, heslo, název aplikace a ID pracovní stanice. Pro atribut serveru vrátí seznam platných názvů serverů. Návratový kód z SQLBrowseConnect je SQL_NEED_DATA. Tady je řetězec výsledků procházení:

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

Za každým klíčovým slovem ve výsledném řetězci procházení následuje dvojtečka a jedno nebo více slov před znaménkem rovná se. Tato slova jsou uživatelsky přívětivý název, který může aplikace použít k vytvoření dialogového okna. Klíčová slova APP a WSID jsou předponou hvězdičky, což znamená, že jsou volitelné. Klíčová slova SERVER, UID a PWD nejsou uvedena s předponou hvězdičky; hodnoty pro ně musí být zadány v řetězci následující žádosti o procházení. Hodnota klíčového slova SERVER může být jedním ze serverů vrácených sqlBrowseConnect nebo uživatelem zadaným názvem.

Aplikace znovu volá SQLBrowseConnect , zadává zelený server a vynechá klíčová slova APP a WSID a uživatelsky přívětivé názvy za každým klíčovým slovem:

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

Ovladač se pokusí připojit k zelenému serveru. Pokud existují nějaké méně závažné chyby, například chybějící pár klíčových slov, vrátí SQLBrowseConnect SQL_NEED_DATA a zůstane ve stejném stavu jako před chybou. Aplikace může volat SQLGetDiagField nebo SQLGetDiagRec k určení chyby. Pokud je připojení úspěšné, ovladač vrátí SQL_NEED_DATA a vrátí řetězec výsledků procházení.

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

Protože atributy v tomto řetězci jsou volitelné, aplikace je může vynechat. Aplikace však musí znovu volat SQLBrowseConnect . Pokud se aplikace rozhodne vynechat název a jazyk databáze, určuje prázdný řetězec žádosti o procházení. V tomto příkladu aplikace zvolí databázi pubs a zavolá naposledy SQLBrowseConnect, vynechá klíčové slovo LANGUAGE a hvězdičku před klíčovým slovem DATABASE:

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

Vzhledem k tomu, že atribut DATABASE je posledním atributem připojení vyžadovaným ovladačem, proces procházení je dokončen, aplikace je připojena ke zdroji dat a SQLBrowseConnect vrátí SQL_SUCCESS. SQLBrowseConnect také vrátí úplný připojovací řetězec jako výsledný řetězec procházení:

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

Konečný připojovací řetězec vrácený ovladačem neobsahuje uživatelsky přívětivé názvy za každým klíčovým slovem ani neobsahuje volitelná klíčová slova, která aplikace nezadá. Aplikace může tento řetězec s SQLDriverConnect použít k opětovnému připojení ke zdroji dat v aktuálním popisovači připojení (po odpojení) nebo k připojení ke zdroji dat na jiném popisovači připojení. Například:

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