谢谢

解决方案 »

  1.   

    安装 MS SQL Server server/client
    引用 Microsoft SQLDMO Object Library'CODE
    Option ExplicitPrivate Sub Command1_Click()
    On Error GoTo Err1
        Dim dmoObj As New SQLDMO.Application
        Dim I       As Long
     
        For I = 1 To dmoObj.ListAvailableSQLServers.Count
            List1.AddItem dmoObj.ListAvailableSQLServers.Item(I)
        Next
    Err1:
    End Sub
      

  2.   

    利用API获得当前网络中的所有计算机名称以及获得当前可用的服务器、SQL服务器、RAS服务器的名称、属性等。在Win2K下运行:
    http://www.applevb.com/sourcecode/getallserveronnet.zip
      

  3.   

    用SQLDMO对象是可以的,我记得还有一种方法可以,而且比较简单,有兴趣你搜索一下以前的帖子。
      

  4.   

    写一个端口扫描软件,只不过只要扫描1433端口就行了,用WINSOCK控件实现很简单的
      

  5.   

    偶以前好像发过获取局域网获取SQL 的代码不是用DMO的,明儿给你找找看:P
      

  6.   

    '类可实现的功能
    '1, 可取得域或工作组内所有的SqlServer服务器名
    '2, 取得各项网络设置Option ExplicitPrivate uNet() As NETRESOURCE_REAL'取得SqlServer服务器名
    '返回的服务器名用","相隔
    Public Function GetSQLServers() As String
        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 sv100 As SV_100
        Dim strReturnValue As String
        
        Dim strDomainList As String '取得的域或工作组列表,用","格开
        Dim iPos As Integer
        Dim i As Integer
        Dim strPart As String    level = 100
        prefmaxlen = -1
        lType = SV_TYPE_SQLSERVER
        
        strDomainList = GetDomain()
        
        i = 1
        
        Do
            iPos = InStr(i, strDomainList, ",")
            If iPos = 0 Then
                strPart = Mid(strDomainList, i, Len(strDomainList))
            Else
                strPart = Mid(strDomainList, i, iPos - i)
            End If
            
            domain = strPart & 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)
                    
                    If strReturnValue = "" Then
                        strReturnValue = Pointer2Stringw(sv100.name)
                    Else
                        strReturnValue = strReturnValue & "," & Pointer2Stringw(sv100.name)
                    End If
                    
                    bufptr = bufptr + Len(sv100)
                Next i
            End If
            
            i = iPos + 1
        Loop Until iPos = 0    NetApiBufferFree bufptr
        
        GetSQLServers = strReturnValue
    End Function'指针转换为字符串
    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
      

  7.   

    '取得网络的各项配置
    Private Sub GetNetworkSetting()
        Const MAX_RESOURCES = 256
        Const NOT_A_CONTAINER = -1
        Dim bFirstTime As Boolean
        Dim lReturn As Long
        Dim hEnum As Long
        Dim lCount As Long
        Dim lMin As Long
        Dim lLength As Long
        Dim l As Long
        Dim lBufferSize As Long
        Dim lLastIndex As Long
        Dim uNetApi(0 To MAX_RESOURCES) As NETRESOURCE
        
        bFirstTime = True
        Do
            If bFirstTime Then
                lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, _
                  RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, ByVal 0&, hEnum)
                bFirstTime = False
            Else
                If uNet(lLastIndex).dwUsage _
                    And RESOURCEUSAGE_CONTAINER Then
                    lReturn = WNetOpenEnum(RESOURCE_GLOBALNET, _
                       RESOURCETYPE_ANY, RESOURCEUSAGE_ALL, _
                       uNet(lLastIndex), hEnum)
                Else
                    lReturn = NOT_A_CONTAINER
                    hEnum = 0
                End If
                lLastIndex = lLastIndex + 1
            End If
            If lReturn = NO_ERROR Then
                lCount = RESOURCE_ENUM_ALL
                Do
                    lBufferSize = UBound(uNetApi) * Len(uNetApi(0)) / 2
                    lReturn = WNetEnumResource(hEnum, lCount, _
                        uNetApi(0), lBufferSize)
                    If lCount > 0 Then
                        ReDim Preserve uNet(0 To lMin + lCount - 1) _
                            As NETRESOURCE_REAL
                        For l = 0 To lCount - 1
                            'Each Resource will appear here as uNet(i)
                            uNet(lMin + l).dwScope = uNetApi(l).dwScope
                            uNet(lMin + l).dwType = uNetApi(l).dwType
                            uNet(lMin + l).dwDisplayType = _
                                uNetApi(l).dwDisplayType
                            uNet(lMin + l).dwUsage = uNetApi(l).dwUsage
                            If uNetApi(l).pLocalName Then
                                lLength = lstrlen(uNetApi(l).pLocalName)
                                uNet(lMin + l).sLocalName = _
                                   Space$(lLength)
                                CopyMem ByVal uNet(lMin _
                                   + l).sLocalName, _
                                   ByVal uNetApi(l).pLocalName, lLength
                            End If
                            If uNetApi(l).pRemoteName Then
                                lLength = lstrlen( _
                                   uNetApi(l).pRemoteName)
                                uNet(lMin + l).sRemoteName = _
                                   Space$(lLength)
                                CopyMem ByVal uNet(lMin + _
                                   l).sRemoteName, _
                                   ByVal uNetApi(l).pRemoteName, lLength
                            End If
                            If uNetApi(l).pComment Then
                                lLength = lstrlen(uNetApi(l).pComment)
                                uNet(lMin + l).sComment = _
                                    Space$(lLength)
                                CopyMem ByVal uNet(lMin + l).sComment, _
                                    ByVal uNetApi(l).pComment, lLength
                            End If
                            If uNetApi(l).pProvider Then
                                lLength = lstrlen(uNetApi(l).pProvider)
                                uNet(lMin + l).sProvider = _
                                   Space$(lLength)
                                CopyMem ByVal uNet(lMin + l).sProvider, _
                                   ByVal uNetApi(l).pProvider, lLength
                            End If
                        Next l
                    End If
                    lMin = lMin + lCount
                Loop While lReturn = ERROR_MORE_DATA
            End If
            If hEnum Then
                l = WNetCloseEnum(hEnum)
            End If
        Loop While lLastIndex < lMin
    End Sub'从网络的各项配置中取得Domain名称,各Domain名用","格开
    Public Function GetDomain() As String
        
        Dim DomainList As String
        Dim l As Long
        
        DomainList = ""
        
        Call GetNetworkSetting
        
        If UBound(uNet) > 0 Then
            For l = 0 To UBound(uNet)
                If uNet(l).dwDisplayType = RESOURCEDISPLAYTYPE_DOMAIN Then
                    
                    If DomainList = "" Then
                        DomainList = uNet(l).sRemoteName
                    Else
                        DomainList = DomainList & "," & uNet(l).sRemoteName
                    End If
                End If
    '            Select Case uNet(l).dwDisplayType
    '                Case RESOURCEDISPLAYTYPE_DIRECTORY&
    '                    Debug.Print "Directory...",
    '                Case RESOURCEDISPLAYTYPE_DOMAIN
    '                    Debug.Print "Domain...",
    '                Case RESOURCEDISPLAYTYPE_FILE
    '                    Debug.Print "File...",
    '                Case RESOURCEDISPLAYTYPE_GENERIC
    '                    Debug.Print "Generic...",
    '                Case RESOURCEDISPLAYTYPE_GROUP
    '                    Debug.Print "Group...",
    '               Case RESOURCEDISPLAYTYPE_NETWORK&
    '                    Debug.Print "Network...",
    '                Case RESOURCEDISPLAYTYPE_ROOT&
    '                    Debug.Print "Root...",
    '                Case RESOURCEDISPLAYTYPE_SERVER
    '                    Debug.Print "Server...",
    '                Case RESOURCEDISPLAYTYPE_SHARE
    '                    Debug.Print "Share...",
    '                Case RESOURCEDISPLAYTYPE_SHAREADMIN&
    '                    Debug.Print "ShareAdmin...",
    '            End Select
    '            Debug.Print uNet(l).sRemoteName, uNet(l).sComment
            Next l
        End If
        
        GetDomain = DomainList
    End Function
      

  8.   

    将代码放在一个类模块中,如CSqlServerdim clsSqlServer as CSqlServer
    set clsSqlServer =new CSqlServerstrSqlServer=clsSqlServer.GetSQLServers()strSqlServer得到局域网内所有的sqlserver服务器名,之间用,隔开