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=?;"  

浏览结果字符串中的每个关键字后跟一个冒号和一个或多个词,然后是等号。 这些词是应用程序可用于生成对话框的用户友好名称。 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,省略 DATABASE 关键字之前的 LANGUAGE 关键字和星号:

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);