Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O SQL Server permite que as aplicações encontrem instâncias SQL Server dentro da rede atual. A SqlDataSourceEnumerator classe expõe esta informação ao programador da aplicação, fornecendo uma DataTable informação contendo sobre todos os servidores visíveis. Esta tabela retornada contém uma lista de instâncias de servidores disponíveis na rede que corresponde à lista fornecida quando um utilizador tenta criar uma nova ligação e expande a lista suspensa com todos os servidores disponíveis na caixa de diálogo Propriedades da Ligação. Os resultados apresentados nem sempre estão completos.
Observação
Como acontece com a maioria dos serviços Windows, é melhor executar o serviço SQL Browser com o mínimo de privilégios possível. Consulte os Livros do SQL Server Online para mais informações sobre o serviço SQL Browser e como gerir o seu comportamento.
Recuperação de uma instância de enumerador
Para recuperar a tabela que contém informações sobre as instâncias disponíveis do SQL Server, deve primeiro obter um enumerador, usando a propriedade partilhada/estática Instance :
System.Data.Sql.SqlDataSourceEnumerator instance =
System.Data.Sql.SqlDataSourceEnumerator.Instance
Depois de recuperar a instância estática, pode chamar o GetDataSources método, que devolve uma DataTable informação contendo sobre os servidores disponíveis:
System.Data.DataTable dataTable = instance.GetDataSources();
A tabela devolvida pela chamada de método contém as seguintes colunas, todas com string valores:
| Coluna | Description |
|---|---|
| ServerName | Nome do servidor. |
| InstanceName | Nome da instância do servidor. Em branco se o servidor estiver a correr 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 de espera e tráfego de rede. Isto pode fazer com que a lista seja diferente em duas chamadas consecutivas. Só os servidores da mesma rede serão listados. Os pacotes de broadcast normalmente não atravessam routers, por isso pode não ver um servidor listado, mas será estável entre chamadas.
Os servidores listados podem ou não ter informações adicionais, como IsClustered e versão. Isto depende de como a lista foi obtida. Os servidores listados através do serviço de navegador SQL Server terão mais detalhes do que os encontrados na infraestrutura Windows, que listará apenas o nome.
Observação
A enumeração de servidores só está disponível quando está a ser executada em confiança total. Assemblies que executam num ambiente parcialmente confiável não conseguirão utilizá-lo, mesmo que tenham a SqlClientPermission permissão de Segurança de Acesso ao Código (CAS).
O SQL Server fornece informações para o SqlDataSourceEnumerator através de um serviço externo do Windows chamado SQL Browser. Este serviço está ativado por defeito, mas os administradores podem desligá-lo ou desativá-lo, tornando a instância do servidor invisível para esta classe.
Example
A aplicação de consola seguinte recolhe informações sobre todas as instâncias visíveis do SQL Server e apresenta a informação na janela da consola.
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("============================");
}
}
}