Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SqlDataSourceEnumerator.Instance.GetDataSources() não localiza a instância local do SQL Server 2008


Você está pulando servidores que não são instâncias nomeadas. Modifique seu código:
public class SqlServerInstance
{
    public string ServerInstance { get; set; }
    public string Version { get; set; } 
}

public static List<SqlServerInstance> LocateSqlInstances()
{
    List<SqlServerInstance> results = new List<SqlServerInstance>();

    using (DataTable sqlSources = SqlDataSourceEnumerator.Instance.GetDataSources())
    {
        foreach (DataRow source in sqlSources.Rows)
        {
            string servername;
            string instancename = source["InstanceName"].ToString();

            if (!string.IsNullOrEmpty(instancename))
            {
                servername =  source["ServerName"].ToString() + '\\' + instancename;
            }
            else
            {
                servername = source["ServerName"].ToString();
            }

            results.Add(new SqlServerInstance (){ ServerInstance = servername, Version = source["Version"].ToString() });
        }
    }

    return results;
}

Observe:SqlDataSourceEnumerator.Instance.GetDataSources() tem desvantagens:
  • Sujeito a regras de firewall (TCP/IP 1433 e UDP 1434 bloqueados)
  • Não encontra SQL Servers se o SQL Browser estiver desativado
  • Não encontra SQL Servers se estiverem ocultos
  • Não é garantido que o conteúdo da lista seja repetível (devido a tempos limite). Na verdade, uma chamada subsequente provavelmente fornecerá uma lista diferente dependendo da E/S da rede, desempenho do servidor, número de servidores na rede e outras restrições dependentes do tempo

Várias fontes dizem que você precisa fazer 2 chamadas para SqlDataSourceEnumerator.Instance.GetDataSources() ...

Referências:
  • SqlDataSourceEnumerator.Instance; não retornando todas as instâncias
  • EnumAvailableSqlServers ou SqlDataSourceEnumerator - Lista incorreta de bancos de dados disponíveis
  • Enumerando SQL Servers
  • Como listar servidores SQL programaticamente