Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SqlDataSourceEnumerator.Instance.GetDataSources() nie lokalizuje lokalnego wystąpienia serwera SQL 2008

Pomijasz serwery, które nie są nazwanymi instancjami. Zmodyfikuj swój kod:

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

Uwaga:SqlDataSourceEnumerator.Instance.GetDataSources() ma wady:

  • Z zastrzeżeniem reguł zapory (Zablokowany TCP/IP 1433 i UDP 1434)
  • Nie znajduje serwerów SQL, jeśli przeglądarka SQL jest wyłączona
  • Nie znajduje serwerów SQL, jeśli są ukryte
  • Nie ma gwarancji, że zawartość listy będzie powtarzalna (ze względu na limity czasu). W rzeczywistości kolejne wywołanie prawdopodobnie da inną listę w zależności od sieci we/wy, wydajności serwera, liczby serwerów w sieci i innych ograniczeń czasowych

Kilka źródeł mówi, że musisz wykonać 2 wywołania do SqlDataSourceEnumerator.Instance.GetDataSources() ...

Odniesienia:

  • SqlDataSourceEnumerator.Instance; nie zwraca wszystkich instancji
  • EnumAvailableSqlServers lub SqlDataSourceEnumerator — Nieprawidłowa lista dostępnych baz danych
  • Wyliczanie serwerów SQL
  • Programowe wyświetlanie serwerów SQL


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MSSQL „Dostawca bazowy nie powiódł się podczas otwierania”

  2. 3 sposoby na zwrócenie wszystkich tabel BEZ klucza podstawowego w SQL Server

  3. Różnica w obsłudze przestrzeni między Oracle a SQL Server

  4. Unikanie pojedynczego cudzysłowu w SQL Server

  5. jak zadeklarować zmienną globalną w SQL Server..?