Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

SqlDataSourceEnumerator.Instance.GetDataSources() ne localise pas l'instance locale du serveur SQL 2008

Vous ignorez les serveurs qui ne sont pas des instances nommées. Modifiez votre code :

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;
}

Veuillez noter :SqlDataSourceEnumerator.Instance.GetDataSources() a des inconvénients :

  • Sous réserve des règles de pare-feu (TCP/IP 1433 et UDP 1434 bloqués)
  • Ne trouve pas les serveurs SQL si le navigateur SQL est désactivé
  • Ne trouve pas les serveurs SQL s'ils sont masqués
  • La répétabilité du contenu de la liste n'est pas garantie (en raison de délais d'attente). En fait, un appel ultérieur est susceptible de donner une liste différente en fonction des E/S réseau, des performances du serveur, du nombre de serveurs sur le réseau et d'autres contraintes dépendant du temps

Plusieurs sources disent que vous devez faire 2 appels à SqlDataSourceEnumerator.Instance.GetDataSources() ...

Réfs :

  • SqlDataSourceEnumerator.Instance ; ne renvoie pas toutes les instances
  • EnumAvailableSqlServers ou SqlDataSourceEnumerator - Liste incorrecte des bases de données disponibles
  • Énumération des serveurs SQL
  • Liste des serveurs SQL par programmation