Dela via


Sql Server-surfningsexempel

I följande exempel visas hur SQLBrowseConnect kan användas för att bläddra bland de anslutningar som är tillgängliga med en drivrutin för SQL Server. Först begär programmet en anslutningsreferens:

SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  

Därefter anropar programmet SQLBrowseConnect och anger SQL Server-drivrutinen med hjälp av drivrutinsbeskrivningen som returneras av SQLDrivers:

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

Eftersom det här är det första anropet till SQLBrowseConnect läser Driver Manager in SQL Server-drivrutinen och anropar drivrutinens SQLBrowseConnect-funktion med samma argument som den tog emot från programmet.

Anmärkning

Om du ansluter till en datakällaprovider som stöder Windows-autentisering bör du ange Trusted_Connection=yes i stället för användar-ID och lösenordsinformation i anslutningssträngen.

Drivrutinen avgör att det här är det första anropet till SQLBrowseConnect och returnerar den andra nivån av anslutningsattribut: server, användarnamn, lösenord, programnamn och arbetsstations-ID. För serverattributet returneras en lista med giltiga servernamn. Returkoden från SQLBrowseConnect är SQL_NEED_DATA. Här är bläddringsresultatet:

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

Varje nyckelord i sökresultatsträngen följs av ett kolon och ett eller flera ord före likhetstecknet. Dessa ord är det användarvänliga namn som ett program kan använda för att skapa en dialogruta. Nyckelorden APP och WSID prefixas av en asterisk, vilket innebär att de är valfria. Nyckelorden SERVER, UID och PWD prefixas inte av en asterisk; därför måste värden anges för dem i nästa bläddringsförfrågningssträng. Värdet för nyckelordet SERVER kan vara en av servrarna som returneras av SQLBrowseConnect eller ett namn som användaren har angett.

Programmet anropar SQLBrowseConnect igen, anger den gröna servern och utelämnar nyckelorden APP och WSID och de användarvänliga namnen efter varje nyckelord:

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

Drivrutinen försöker att ansluta till den gröna servern. Om det finns några icke-fatala fel, till exempel ett nyckelordsvärdepar som saknas, returnerar SQLBrowseConnect SQL_NEED_DATA och förblir i samma tillstånd som före felet. Programmet kan anropa SQLGetDiagField eller SQLGetDiagRec för att fastställa felet. Om anslutningen lyckas returnerar drivrutinen SQL_NEED_DATA och ger tillbaka bläddringsresultatsträngen:

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

Eftersom attributen i den här strängen är valfria kan programmet utelämna dem. Programmet måste dock anropa SQLBrowseConnect igen. Om programmet väljer att utelämna databasnamnet och språket anger det en tom sökbegärandesträng. I det här exemplet väljer programmet pubdatabasen och anropar SQLBrowseConnect en sista gång och utelämnar nyckelordet LANGUAGE och asterisken före nyckelordet DATABASE :

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

Eftersom database-attributet är det slutliga anslutningsattributet som krävs av drivrutinen är webbläsarprocessen klar, programmet är anslutet till datakällan och SQLBrowseConnect returnerar SQL_SUCCESS. SQLBrowseConnect returnerar också den fullständiga anslutningssträngen som bläddreringsresultatsträng:

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

Den sista anslutningssträngen som returneras av drivrutinen innehåller inte de användarvänliga namnen efter varje nyckelord och innehåller inte heller valfria nyckelord som inte har angetts av programmet. Programmet kan använda den här strängen med SQLDriverConnect för att återansluta till datakällan på det aktuella anslutningshandtaget (efter frånkoppling) eller för att ansluta till datakällan på en annan anslutningsreferens. Till exempel:

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