Partilhar via


Enumerando instâncias do SQL Server (ADO.NET)

O SQL Server permite que os aplicativos localizem instâncias do SQL Server na rede atual. A SqlDataSourceEnumerator classe expõe essas informações para o desenvolvedor do aplicativo, fornecendo uma DataTable contendo informações sobre todos os servidores visíveis. Esta tabela retornada contém uma lista de instâncias de servidor disponíveis na rede que corresponde à lista fornecida quando um usuário tenta criar uma nova conexão e expande a lista suspensa contendo todos os servidores disponíveis na caixa de diálogo Propriedades da Conexão. Os resultados apresentados nem sempre estão completos.

Nota

Tal como acontece com a maioria dos serviços do Windows, é melhor executar o serviço Navegador SQL com o mínimo de privilégios possível.

Recuperando uma instância do enumerador

Para recuperar a tabela que contém informações sobre as instâncias disponíveis do SQL Server, você deve primeiro recuperar um enumerador, usando a propriedade shared/static Instance :

Dim instance As System.Data.Sql.SqlDataSourceEnumerator = _  
   System.Data.Sql.SqlDataSourceEnumerator.Instance  
System.Data.Sql.SqlDataSourceEnumerator instance =
   System.Data.Sql.SqlDataSourceEnumerator.Instance  

Depois de recuperar a instância estática, você pode chamar o GetDataSources método, que retorna uma DataTable contendo informações sobre os servidores disponíveis:

Dim dataTable As System.Data.DataTable = instance.GetDataSources()  
System.Data.DataTable dataTable = instance.GetDataSources();  

A tabela retornada da chamada de método contém as seguintes colunas, todas contendo string valores:

Coluna Description
Nome do servidor Nome do servidor do .
Nome da instância Nome da instância do servidor. Em branco se o servidor estiver sendo executado como instância padrão.
IsClustered Indica se o servidor faz parte de um cluster.
Versão Versão do servidor. Por exemplo:

- 9.00.x (SQL Server 2005)
- 10.0.xx (SQL Server 2008)
- 10.50.x (SQL Server 2008 R2)
- 11.0.xx (SQL Server 2012)

Limitações de enumeração

Todos os servidores disponíveis podem ou não estar listados. A lista pode variar dependendo de fatores como tempos limite e tráfego de rede. Isso pode fazer com que a lista seja diferente em duas chamadas consecutivas. Apenas servidores na mesma rede serão listados. Os pacotes de transmissão normalmente não atravessam roteadores, e é por isso que você pode não ver um servidor listado, mas ele será estável em todas as chamadas.

Os servidores listados podem ou não ter informações adicionais, como IsClustered e versão. Isto depende da forma como a lista foi obtida. Os servidores listados por meio do serviço de navegador do SQL Server terão mais detalhes do que aqueles encontrados por meio da infraestrutura do Windows, que listará apenas o nome.

Nota

A enumeração de servidor só está disponível quando executada em confiança total. Os assemblies executados em um ambiente parcialmente confiável não poderão usá-lo, mesmo que tenham a permissão CAS (Segurança de Acesso ao SqlClientPermission Código).

O SQL Server fornece informações para o SqlDataSourceEnumerator uso de um serviço externo do Windows chamado Navegador SQL. Esse serviço é habilitado por padrão, mas os administradores podem desativá-lo ou desativá-lo, tornando a instância do servidor invisível para essa classe.

Exemplo

O aplicativo de console a seguir recupera informações sobre todas as instâncias visíveis do SQL Server e exibe as informações na janela do console.

Imports System.Data.Sql  
  
Module Module1  
  Sub Main()  
    ' Retrieve the enumerator instance and then the data.  
    Dim instance As SqlDataSourceEnumerator = _  
     SqlDataSourceEnumerator.Instance  
    Dim table As System.Data.DataTable = instance.GetDataSources()  
  
    ' Display the contents of the table.  
    DisplayData(table)  
  
    Console.WriteLine("Press any key to continue.")  
    Console.ReadKey()  
  End Sub  
  
  Private Sub DisplayData(ByVal table As DataTable)  
    For Each row As DataRow In table.Rows  
      For Each col As DataColumn In table.Columns  
        Console.WriteLine("{0} = {1}", col.ColumnName, row(col))  
      Next  
      Console.WriteLine("============================")  
    Next  
  End Sub  
End Module  
using System.Data.Sql;  
  
class Program  
{  
  static void Main()  
  {  
    // Retrieve the enumerator instance and then the data.  
    SqlDataSourceEnumerator instance =  
      SqlDataSourceEnumerator.Instance;  
    System.Data.DataTable table = instance.GetDataSources();  
  
    // Display the contents of the table.  
    DisplayData(table);  
  
    Console.WriteLine("Press any key to continue.");  
    Console.ReadKey();  
  }  
  
  private static void DisplayData(System.Data.DataTable table)  
  {  
    foreach (System.Data.DataRow row in table.Rows)  
    {  
      foreach (System.Data.DataColumn col in table.Columns)  
      {  
        Console.WriteLine("{0} = {1}", col.ColumnName, row[col]);  
      }  
      Console.WriteLine("============================");  
    }  
  }  
}  

Consulte também