Hi Experts:
I need a simple way to get the name of SQL servers running on the LAN and Local machine as well as their database names. The code I tried, with no luck (due to complexity) is below. Does someone know of a better approach? I'm using Visual basis 2005 / 2008 Express edition. I need to be able to do this programmatically.
Thanks in advance!
pandkyon
Public Class SqlServer
' '' <summary>
' '' The form of EnumerateServers for all machines in the network.
' '' </summary>
Public Overloads Shared Function EnumerateServers() As ServerInstance()
Return EnumerateServers("")
End Function
' '' <summary>
' '' Return a collection of server instance descriptors for all SQL Servers within a network
' '' </summary>
' '' <param name="computerName">Specif
y a computer name to target a particular machine</param>
' '' <returns>An array of ServerInstance descriptor objects</returns>
' '' <remarks>This method translates the DataTable to a list of objects with Intellisense.</remarks>
Public Overloads Shared Function EnumerateServers(ByVal computerName As String) As ServerInstance()
Dim tableServers As DataTable = Nothing
If (computerName.Length = 0) Then
tableServers = SmoApplication.EnumAvailab
leSqlServe
rs
Else
tableServers = SmoApplication.EnumAvailab
leSqlServe
rs(compute
rName)
End If
' Create enough space for all the SQL Server instances.
Dim list(,) As ServerInstance
' Build the list of servers.
Dim index As Integer = 0
Do While (index _
<= (tableServers.Rows.Count - 1))
Dim row As DataRow = tableServers.Rows(index)
Dim name As String = row("Name").ToString
Dim server As String = row("Server").ToString
Dim instance As String = row("Instance").ToString
Dim clustered As Boolean = row("IsClustered").ToStrin
g
Dim local As Boolean = row("IsLocal").ToString
Dim entry As ServerInstance = New ServerInstance(name, server, instance, clustered, local)
list(index) = entry
index = (index + 1)
Loop
Return list
End Function
Public Class ServerInstance
Private m_name As String = ""
Private m_server As String = ""
Private m_instance As String = ""
Private m_clustered As Boolean
Private m_local As Boolean
Public Sub New(ByVal name As String, ByVal server As String, ByVal instance As String, ByVal clustered As Boolean, ByVal local As Boolean)
MyBase.New
m_name = name
m_server = server
m_instance = instance
m_clustered = clustered
m_local = local
End Sub
Public Property Name As String
Get
Return m_name
End Get
Set
m_name = value
End Set
End Property
Public Property Server As String
Get
Return m_server
End Get
Set
m_server = value
End Set
End Property
Public Property Instance As String
Get
Return m_instance
End Get
Set
m_instance = value
End Set
End Property
Public Property IsClustered As Boolean
Get
Return m_clustered
End Get
Set
m_clustered = value
End Set
End Property
Public Property IsLocal As Boolean
Get
Return m_local
End Get
Set
m_local = value
End Set
End Property
End Class
End Class
Dim s() As SqlServer.ServerInstance
s = SqlServer.EnumerateServers
cmbServer.Items.Clear
i = 0
Do While (i _
<= (s.Length - 1))
cmbServer.Items.Add(s(i).N
ame)
i = (i + 1)
Loop
Start Free Trial