Como listar as instancias do SQLServer
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
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
Fernando Borstmann
Curtidas 0
Respostas
Joel Rodrigues
09/02/2012
Rapaz, fiz isso aqui em C# e funcionou legal:
-------------------------------------------------------------------
SqlDataSourceEnumerator servers = SqlDataSourceEnumerator.Instance;
edtServidor.DataSource = servers.GetDataSources();
-------------------------------------------------------------------
-------------------------------------------------------------------
SqlDataSourceEnumerator servers = SqlDataSourceEnumerator.Instance;
edtServidor.DataSource = servers.GetDataSources();
-------------------------------------------------------------------
GOSTEI 0
Fernando Borstmann
09/02/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!
valeu!
GOSTEI 0
Joel Rodrigues
09/02/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)?
GOSTEI 0
Fernando Borstmann
09/02/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
GOSTEI 0
Fernando Borstmann
09/02/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
GOSTEI 0
Joel Rodrigues
09/02/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.
Dá uma olhada nesse conteúdo, lá fala sobre alguns motivos pelos quais os servidores podem não ser listados.
GOSTEI 0
Fernando Borstmann
09/02/2012
depois de algum trabalho e pesquisa consegui fazer, agradeço a atenção e auxilio
GOSTEI 0
Joel Rodrigues
09/02/2012
Opa, poderia dizer qual era o problema e como resolveu?
Grato.
Grato.
GOSTEI 0
Fernando Borstmann
09/02/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
-- 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
GOSTEI 0