用vb编程如何得到局域网内的sql server 服务器列表

解决方案 »

  1.   

    Private Sub Command1_Click()
        Dim Server As SQLDMO.NameList          
        Dim appDMO As New SQLDMO.Application   
        Dim i As Integer
        
        Set Server = appDMO.ListAvailableSQLServers        
        
        For i = 1 To Server.Count
            List1.AddItem Server(i)      
        NextEnd Sub
      

  2.   

    option Explicit
    '
    '
    '
    private Declare Function lstrlenW Lib "kernel32" (byval lpString as Long) as Long
    '
    private Declare Function NetServerEnum Lib "netapi32" ( _
        strServername as Any, _
        byval level as Long, _
        bufptr as Long, _
        byval prefmaxlen as Long, _
        entriesread as Long, _
        totalentries as Long, _
        byval servertype as Long, _
        strDomain as Any, _
        resumehandle as Long) as Long
    '
    private Declare Function NetApiBufferFree Lib "Netapi32.dll" (byval lpBuffer as Long) as Long
    '
    private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination as Any, Source as Any, byval Length as Long)
    '
    private Const SV_TYPE_SERVER as Long = &H2
    private Const SV_TYPE_SQLSERVER as Long = &H4
    '
    private Type SV_100
        platform as Long
        name as Long
    End Type
    '
    '
    public Sub GetSQLServers()
    '
    ' You could change this to be a function returning
    ' a list of the SQL servers in a ADOR Recordset or an array etc.
    '
    ' At present, it just does a debug.print of all the
    ' SQL servers on the network.
    '
    '
        Dim l as Long
        Dim entriesread as Long
        Dim totalentries as Long
        Dim hREsume as Long
        Dim bufptr as Long
        Dim level as Long
        Dim prefmaxlen as Long
        Dim lType as Long
        Dim domain() as Byte
        Dim i as Long
        Dim sv100 as SV_100
    '   
        level = 100
        prefmaxlen = -1
    '
        lType = SV_TYPE_SQLSERVER
        domain = "placeYourDomainNameHere" & vbNullChar
        l = NetServerEnum(byval 0&, _
                level, _
                bufptr, _
                prefmaxlen, _
                entriesread, _
                totalentries, _
                lType, _
                domain(0), _
                hREsume)
        
        If l = 0 Or l = 234& then
            for i = 0 to entriesread - 1
                CopyMemory sv100, byval bufptr, len(sv100)
                Debug.print Pointer2stringw(sv100.name)
                bufptr = bufptr + len(sv100)
            next i
        End If
        NetApiBufferFree bufptr
    '
    End Sub
    '
    private Function Pointer2stringw(byval l as Long) as string
        Dim buffer() as Byte
        Dim nLen as Long
    '
        nLen = lstrlenW(l) * 2
        If nLen then
            ReDim buffer(0 to (nLen - 1)) as Byte
            CopyMemory buffer(0), byval l, nLen
            Pointer2stringw = buffer
        End If
    End Function
      

  3.   

    http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=98391
      

  4.   

    请问如何引用SQLDMO libary
    我找不到啊