应该怎样获取局域网内所有的SQL服务器名?谢谢!

解决方案 »

  1.   

    亏了,只有20分bool CPageSrcData::GetSqlServers(CStringArray& aServerList)
    {
    aServerList.RemoveAll(); SQLHENV hSQLEnv;
    SQLHDBC hSQLHdbc;
    short sConnStrOut;
    int iRet=0;
    bool bSucceeded=false; //Allocate the environment handle
    iRet = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &hSQLEnv);
    if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO)
    {
    //Set the environment attribute to SQL_OV_ODBC3
    iRet = SQLSetEnvAttr(hSQLEnv, SQL_ATTR_ODBC_VERSION, (void *)SQL_OV_ODBC3, 0);
    if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO) 
    {
    //Allocate a connection handle
    iRet = SQLAllocHandle(SQL_HANDLE_DBC, hSQLEnv, &hSQLHdbc);
    if (iRet == SQL_SUCCESS || iRet == SQL_SUCCESS_WITH_INFO) 
    {
    CString strConnStrOut;
    //Call SQLBrowseConnect for additional information
    iRet = SQLBrowseConnect(hSQLHdbc, (SQLCHAR *)_T("Driver={SQL Server}"), SQL_NTS,
    (SQLCHAR *)strConnStrOut.GetBuffer(4824), 4824, &sConnStrOut);
    //if the look up key is found
    //fill in the result set
    CString strSeps=_T("{}"),strServers,strServer,strToken;
    int iFind = strConnStrOut.Find(_T("SERVER:Server="));
    if(iFind != -1)
    {
    strServers=strtok(CStrBuf(strConnStrOut),strSeps);
    strServers=strtok(NULL,strSeps);
    strSeps=_T(",");
    strServer=strtok(CStrBuf(strServers),strSeps);
     while(!strServer.IsEmpty())
     {
     aServerList.Add(strServer);
     strServer=strtok(NULL,strSeps);
     }
     bSucceeded=true;
    } SQLDisconnect(hSQLHdbc);
    }
    SQLFreeHandle(SQL_HANDLE_DBC, hSQLHdbc);
    }
    SQLFreeHandle(SQL_HANDLE_ENV, hSQLEnv);
    } return bSucceeded;
    }
    用法
    void CPageSrcData::InitServerList(void)
    {
    CWaitCursor wait;
    CStringArray aSqlServerList;
    if(GetSqlServers(aSqlServerList))
    {
    for(int i=0;i<aSqlServerList.GetCount();i++)
    m_cmbSQLServer.AddString(aSqlServerList.GetAt(i));
    }
    m_cmbSQLServer.SetCurSel(0);
    }stdafx.h要加入
    #include <sql.h>
    #include <sqlext.h>
    #pragma comment(lib,"odbc32.lib")如果可以的话,呵呵,就不说了:)
      

  2.   

    OK! This can work! Thanks