Array
(
)

Como listar as instancias do SQLServer

Fernando Borstmann
   - 09 fev 2012

galera, estou com um probleminha pra listar as instancias do SQL na rede, exemplo: no próprio wizard de conexão com o banco de dados no VBNET quando vamos add um dataset temos um browse onde quando fazemos o dropdown do combobox ele ja nos lista todos os SQL servers da rede, queria fazer isso pra minha aplicação, tentei o seguinte codigo mas o nome da instancia fica em branco, se alguem puder ajudar agradeço
Dim dtServers As DataTable = SqlDataSourceEnumerator.Instance.GetDataSources

With DataGridView1
.DataSource = dtServers
com esse metodo consigo listar apenas as tabelas mas nao as linhas que contem o nome da instancia.
abs

Joel Rodrigues
   - 09 fev 2012

Rapaz, fiz isso aqui em C# e funcionou legal:
-------------------------------------------------------------------
SqlDataSourceEnumerator servers = SqlDataSourceEnumerator.Instance;
edtServidor.DataSource = servers.GetDataSources();
-------------------------------------------------------------------

Fernando Borstmann
   - 09 fev 2012

eu coloquei exatamente esse mesmo codigo no form mas mesmo assim o grid continua mostrando apenas as colunas que retornam dessa colection : servername, instancename, isclustered e version, porém as linhas voltam vazias, sem os dados das instancias que tenho na rede, hoje tenho 3 SQL server´s rodando aqui, tem alguma outra classe que tenha que importar pra isso acontecer? to apenas fazendo o imports/using System.Data.SQL
valeu!

Joel Rodrigues
   - 09 fev 2012

Os servidores são listados normalmente no Management Studio? E você consegue abrir uma conexão com qualquer um desses servidores manualmente (usando o SqlConnection)?

Fernando Borstmann
   - 09 fev 2012

sim, todos aparecem no SSMS normalmente, e eu tenho aplicações rodando e acessando todos eles, estranho isso, pois tentei colocar esse código numa aplicação do meu Notebook de desenvolvimento e ele não lista nem mesmo o SQL que esta local no note, ou seja não é um problema de firewall de rede ou coisas assim, eis a dúvida do que seja agora rss

Fernando Borstmann
   - 09 fev 2012

sim, todos aparecem no SSMS normalmente, e eu tenho aplicações rodando e acessando todos eles, estranho isso, pois tentei colocar esse código numa aplicação do meu Notebook de desenvolvimento e ele não lista nem mesmo o SQL que esta local no note, ou seja não é um problema de firewall de rede ou coisas assim, eis a dúvida do que seja agora rss

Joel Rodrigues
   - 09 fev 2012

Qual a versão do SQL Server e qual a versão do .NET?
Dá uma olhada nesse conteúdo, lá fala sobre alguns motivos pelos quais os servidores podem não ser listados.

Fernando Borstmann
   - 10 fev 2012

depois de algum trabalho e pesquisa consegui fazer, agradeço a atenção e auxilio

Joel Rodrigues
   - 13 fev 2012

Opa, poderia dizer qual era o problema e como resolveu?
Grato.

Fernando Borstmann
   - 14 fev 2012

claro, segue o código:

-- Estabelece Locals
Dim results As DataTable
Dim ret As New List(Of String)

-- Mostrar mensagem no ListView para aguardar
Me.ListView1.Items.Add(Carregando Lista. Aguarde...)
Me.ListView1.ForeColor = Color.Gray
Me.ListView1.Refresh()

-- Tenta buscar servers disponíveis na rede
results = SqlDataSourceEnumerator.Instance.GetDataSources()

-- Limpar ListView
Me.ListView1.Items.Clear()
Me.ListView1.ForeColor = Color.Black

-- Coloca o resultado numa lista e num ListView
For Each r As DataRow In results.Rows
-- Determina o nome da Instância
If Not r.IsNull(InstanceName) Then
ret.Add(CType(r.Item(ServerName), String) & \ & CType(r.Item(InstanceName), String))
Me.ListView1.Items.Add(CType(r.Item(ServerName), String) & \ & CType(r.Item(InstanceName), String))
Else
ret.Add(CType(r.Item(ServerName), String))
Me.ListView1.Items.Add(CType(r.Item(ServerName), String))
End If
Next
End Sub