Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

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

.NET Framework (current version)
 

O SQL Server permite que aplicativos localizem instâncias do SQL Server na rede atual. A classe SqlDataSourceEnumerator expõe essas informações para o desenvolvedor de aplicativos, fornecendo um DataTable que contém 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 que contém todos os servidores disponíveis na caixa de diálogo Propriedades da Conexão. Os resultados exibidos nem sempre estão completos.

System_CAPS_noteObservação

Como ocorre na maioria dos serviços do Windows, é melhor executar o serviço do navegador do SQL com o mínimo possível de privilégios. Consulte os Manuais Online do SQL Server para obter mais informações sobre o serviço do navegador do SQL, e sobre como gerenciar seu comportamento.

Para recuperar a tabela que contém informações sobre as instâncias disponíveis do SQL Server, primeiro recupere um enumerador, usando a propriedade compartilhada/estática Instance:

System.Data.Sql.SqlDataSourceEnumerator instance = 
   System.Data.Sql.SqlDataSourceEnumerator.Instance

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

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

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

Column

Descrição

ServerName

Nome do servidor.

InstanceName

Nome da instância do servidor. Em branco se o servidor está em execução como a instância padrão.

IsClustered

Indica se o servidor é parte de um cluster.

Version

Versão do servidor. Por exemplo:

  • 9.00 (SQL Server 2005)

  • 10.0.xx (SQL Server 2008)

  • 10.50.x (SQL Server 2008 R2)

  • 11.0.xx (SQL Server 2012)

Todos os servidores podem ou não estarem listados. A lista varia de acordo com fatores como o tempo limite e o tráfego de rede. Isso pode gerar listas diferentes em duas chamadas consecutivas. Somente os servidores na mesma rede serão listados. Pacotes de difusão normalmente não atravessarão roteadores. Por isso, talvez você não encontre um servidor listado, mas ele será estável em chamadas.

Servidores listados podem ou não ter informações adicionais como IsClustered e versão. Isso depende de como a lista foi obtida. Servidores listados através do serviço do navegador do SQL Server terão mais detalhes do que os encontrados pela infraestrutura do Windows, que listarão somente o nome.

System_CAPS_noteObservação

Servidor de enumeração só está disponível quando executar em full-trust. Assemblies executados em um ambiente de confiança parcial não poderão usá-la, mesmo que tenham a permissão CAS (segurança do acesso ao código) SqlClientPermission.

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

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.

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("============================");
    }
  }
}
Mostrar: