Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Try This, Uses the Net API

 

Public Class clsNetAPI32
   Private Const SV_TYPE_SQLSERVER = &H4S
   ' NetServerEnum Return Values 
   Private Const ERR_SUCCESS = 0
   Private Const ERROR_MORE_DATA As Int32 = 234
   Private Const ERROR_NO_BROWSER_SERVERS_FOUND As Int32 = 6118I

   Private Structure SERVER_INFO_100
       Dim sv100_platform_id As Integer
       Dim sv100_name As Integer
   End Structure
   ' 
   ' level : Specifies the information level of the data 
   ' bufptr : Pointer to the buffer that receives the data 
   ' prefmaxlen : Specifies the preferred maximum length of returned data, in bytes 
   ' entriesread : Pointer to a value that receives the count of elements actually enumerated 
   ' totalentries : Pointer to a value that receives the total number of visible servers and workstations on the network 
   ' servertype : Specifies a value that filters the server entries to return from the enumeration 
   ' domain : Pointer to a constant string that specifies the name of the domain for which a list of servers is to be returned 
   ' resume_handle : Reserved; must be set to zero 
   Private Declare Unicode Function NetServerEnum Lib "netapi32" _
         (ByVal servername As IntPtr _
         , ByVal level As Integer _
         , ByRef bufptr As IntPtr _
         , ByVal prefmaxlen As Integer _
         , ByRef entriesread As Integer _
         , ByRef totalentries As Integer _
         , ByVal servertype As Integer _
         , ByVal domain As IntPtr _
         , ByVal resume_handle As Integer _
         ) As Integer

   Private Declare Function NetApiBufferFree Lib "netapi32" _
    (ByVal BufPtr As IntPtr) As Integer

   Public Function GetListOfServers(ByRef colSQLServers As Collection) As Boolean

       Dim sServerName As IntPtr = IntPtr.Zero
       Dim iLevel As Integer = 100
       Dim lBufPtr As IntPtr
       Dim iprefMaxLen As Integer = -1
       Dim iEntriesRead As Integer
       Dim iTotalEntries As Integer
       Dim sDomain As IntPtr = IntPtr.Zero
       Dim iResumeHandle As Integer = 0
       Dim iReturnValue As Integer

       Dim sctSrvList As SERVER_INFO_100
       Dim nStructSize As Integer = Marshal.SizeOf(sctSrvList)
       Dim scSQLServers As New Specialized.StringCollection
       Dim iIndex As Integer

       colSQLServers = New Collection
       iReturnValue = NetServerEnum(sServerName _
                                   , iLevel _
                                   , lBufPtr _
                                   , iprefMaxLen _
                                   , iEntriesRead _
                                   , iTotalEntries _
                                   , SV_TYPE_SQLSERVER _
                                   , sDomain _
                                   , iResumeHandle _
                                   )
       If iReturnValue = ERR_SUCCESS Then
           ' Loop through each SQL Server returned by the NetServerEnum call 
           For iIndex = 0 To iEntriesRead - 1
               ' Convert each SQL Server entry into a SERVER_INFO_100 structure 
               sctSrvList = DirectCast(Marshal.PtrToStructure(New IntPtr(lBufPtr.ToInt32 + (nStructSize * iIndex)) _
                                                             , GetType(SERVER_INFO_100) _
                                                             ) _
                                      , SERVER_INFO_100 _
                                      )
               ' Add each SQL Server SERVER_INFO_100 structure entry into the StringCollection 
               scSQLServers.Add(Marshal.PtrToStringUni(New IntPtr(sctSrvList.sv100_name)))
           Next

       End If

       ' Clean up regardless of iReturnValue 
       Call NetApiBufferFree(lBufPtr)

       ' Move from String Collection to Array To Collection 
       ' I only return the list as a collection because 
       ' collections are what I am used to 
       Dim sSQLServers(scSQLServers.Count - 1) As String
       scSQLServers.CopyTo(sSQLServers, 0)
       For iIndex = 0 To sSQLServers.GetUpperBound(0)
           colSQLServers.Add(sSQLServers(iIndex))
       Next
       Return True

   End Function

End Class

Glenn "Mykre" Wilson, DirectX MVP

Inner Realm

Managed DirectX and Game Programming Resources

Posted

Or This Uses SQL-DMO

 

Public Class clsSQLDMO
   Public Function GetListOfSQLServers(ByRef colSQLServers As Collection) As Boolean
       Dim iIndex As Integer
       Dim oSQLServer As New SQLDMO.SQLServer
       Dim oServerList As SQLDMO.NameList = oSQLServer.Application.ListAvailableSQLServers
       colSQLServers = New Collection
       For iIndex = 1 To oServerList.Count
           colSQLServers.Add(oServerList.Item(iIndex).ToString)
       Next
       Return True
   End Function
End Class

Glenn "Mykre" Wilson, DirectX MVP

Inner Realm

Managed DirectX and Game Programming Resources

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...