sql >> Base de Datos >  >> RDS >> Sqlserver

SqlDataSourceEnumerator.Instance.GetDataSources() no localiza la instancia local del servidor SQL 2008

Está omitiendo servidores que no son instancias con nombre. Modifica tu 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;
}

Tenga en cuenta:SqlDataSourceEnumerator.Instance.GetDataSources() tiene inconvenientes:

  • Sujeto a las reglas del cortafuegos (TCP/IP 1433 y UDP 1434 bloqueados)
  • No encuentra servidores SQL si el navegador SQL está desactivado
  • No encuentra servidores SQL si están ocultos
  • No se garantiza que el contenido de la lista sea repetible (debido a tiempos de espera). De hecho, es muy probable que una llamada posterior proporcione una lista diferente según la E/S de la red, el rendimiento del servidor, la cantidad de servidores en la red y otras restricciones dependientes del tiempo

Varias fuentes dicen que tienes que hacer 2 llamadas a SqlDataSourceEnumerator.Instance.GetDataSources() ...

Referencias:

  • SqlDataSourceEnumerator.Instance; no devolver todas las instancias
  • EnumAvailableSqlServers o SqlDataSourceEnumerator:lista incorrecta de bases de datos disponibles
  • Enumeración de servidores SQL
  • Enumeración programática de servidores SQL