因为要在程序中动态配置数据源,需要得到服务器名字,故有此一问,各位请帮帮忙!

解决方案 »

  1.   

    SQL的服务器一般会开放1433端口,做个扫描就行了
      

  2.   

    用NetServerEnum函数,MSDN上该函数有一个列子。
      

  3.   

    代码如下:(对在线的局域网上的SQL服务器)
       char a[64],tempchar[64];
       CString str;
       PSERVER_INFO_100 pBuf;
       PSERVER_INFO_100 pTmpBuf;
       DWORD dwLevel = 100;
       DWORD dwPrefMaxLen = -1;
       DWORD dwEntriesRead = 0;
       DWORD dwTotalEntries = 0;
       DWORD dwTotalCount = 0;
       DWORD dwServerType = SV_TYPE_SQLSERVER; 
       DWORD dwResumeHandle = 0;
       NET_API_STATUS nStatus;
       LPTSTR pszServerName = NULL;
       DWORD i;
       nStatus = NetServerEnum(NULL,
                               dwLevel,
                               (LPBYTE *) &pBuf,
                               dwPrefMaxLen,
                               &dwEntriesRead,
                               &dwTotalEntries,
                               dwServerType,
                               NULL,
                               &dwResumeHandle);
       if ((nStatus == NERR_Success) || (nStatus == ERROR_MORE_DATA))
       {
          if ((pTmpBuf = pBuf) != NULL)
          {
             for (i = 0; i < dwEntriesRead; i++)
             {            if (pTmpBuf == NULL)
                {
                   fprintf(stderr, "An access violation has occurred\n");
                   break;
                }
                int leng = lstrlenW((unsigned short*)pTmpBuf->sv100_name)*2;
    if (leng>0)
    RtlMoveMemory(a,pTmpBuf->sv100_name,leng);
    memset(tempchar,0,64);
    WideCharToMultiByte( 0, 0, (unsigned short*)a, -1, tempchar, leng/2, NULL, NULL );
    str+=tempchar;
                pTmpBuf++;
                dwTotalCount++;
             }         if (nStatus == ERROR_MORE_DATA)
             {
                fprintf(stderr, "\nMore entries available!!!\n");
                fprintf(stderr, "Total entries: %d", dwTotalEntries);
             }         printf("\nEntries enumerated: %d\n", dwTotalCount);
          }
       }
       if (pBuf != NULL)
          NetApiBufferFree(pBuf);
      

  4.   

    需要头文件:#include <Lm.h>
    库:NETAPI32.LIB