Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SqlDataSourceEnumerator.Instance.GetDataSources() findet keine lokale SQL Server 2008-Instanz

Sie überspringen Server, die keine benannten Instanzen sind. Ändern Sie Ihren 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;
}

Bitte beachten Sie:SqlDataSourceEnumerator.Instance.GetDataSources() hat Nachteile:

  • Unterliegt Firewall-Regeln (Blockiertes TCP/IP 1433 und UDP 1434)
  • Findet keine SQL-Server, wenn der SQL-Browser ausgeschaltet ist
  • Findet keine versteckten SQL-Server
  • Listeninhalte sind nicht garantiert wiederholbar (aufgrund von Zeitüberschreitungen). Tatsächlich ergibt ein nachfolgender Aufruf je nach Netzwerk-E/A, Serverleistung, Anzahl der Server im Netzwerk und anderen zeitabhängigen Einschränkungen sehr wahrscheinlich eine andere Liste

Mehrere Quellen sagen, dass Sie SqlDataSourceEnumerator.Instance.GetDataSources() zweimal aufrufen müssen ...

Referenzen:

  • SqlDataSourceEnumerator.Instance; nicht alle Instanzen zurückgeben
  • EnumAvailableSqlServers oder SqlDataSourceEnumerator - Falsche Liste verfügbarer Datenbanken
  • SQL-Server aufzählen
  • Programmgesteuertes Auflisten von SQL-Servern