SQL Server 浏览示例

以下示例演示如何使用 SQLBrowseConnect 浏览 SQL Server 驱动程序可用的连接。 首先,应用程序请求连接句柄:

SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);  

接下来,应用程序使用 SQLDrivers 返回的驱动程序说明调用 SQLBrowseConnect 并指定 SQL Server 驱动程序:

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

由于这是对 SQLBrowseConnect 的第一次调用,驱动程序管理器加载 SQL Server 驱动程序,并使用从应用程序收到的相同参数调用驱动程序的 SQLBrowseConnect 函数。

注释

如果要连接到支持 Windows 身份验证的数据源提供程序,则应在连接字符串中指定 Trusted_Connection=yes 而不是用户 ID 和密码信息。

驱动程序确定这是对 SQLBrowseConnect 的第一次调用,并返回第二级连接属性:服务器、用户名、密码、应用程序名称和工作站 ID。 对于服务器属性,它返回有效的服务器名称列表。 SQLBrowseConnect 的返回代码SQL_NEED_DATA。 下面是浏览结果字符串:

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

浏览结果字符串中的每个关键字后跟一个冒号和一个或多个单词,然后是等号。 这些单词是应用程序可用于生成对话框的用户友好名称。 APPWSID 关键字以星号为前缀,这意味着它们是可选的。 SERVERUIDPWD 关键字不以星号为前缀;必须在下一个浏览请求字符串中为其提供值。 SERVER 关键字的值可以是由 SQLBrowseConnect 返回的服务器之一或用户提供的名称。

应用程序再次调用 SQLBrowseConnect ,指定绿色服务器并省略 APPWSID 关键字以及每个关键字后的用户友好名称:

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

驱动程序尝试连接到绿色服务器。 如果存在任何非严重错误(例如缺少关键字值对), SQLBrowseConnect 将返回SQL_NEED_DATA,并保持与错误之前相同的状态。 应用程序可以调用 SQLGetDiagFieldSQLGetDiagRec 来确定错误。 如果连接成功,驱动程序将返回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);