sql >> Database teknologi >  >> RDS >> Sqlserver

SqlDataSourceEnumerator.Instance.GetDataSources() finder ikke lokal SQL-server 2008-instans

Du springer over servere, der ikke er navngivne forekomster. Rediger din kode:

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

Bemærk venligst:SqlDataSourceEnumerator.Instance.GetDataSources() har ulemper:

  • Underlagt firewallregler (blokeret TCP/IP 1433 og UDP 1434)
  • Finder ikke SQL-servere, hvis SQL-browseren er slået fra
  • Finder ikke SQL-servere, hvis de er skjulte
  • Indhold på listen er ikke garanteret gentageligt (på grund af timeouts). Faktisk er det meget sandsynligt, at et efterfølgende opkald giver en anden liste afhængigt af netværkets I/O, serverydelse, antallet af servere på netværket og andre tidsafhængige begrænsninger

Flere kilder siger, at du skal foretage 2 opkald til SqlDataSourceEnumerator.Instance.GetDataSources() ...

Refs:

  • SqlDataSourceEnumerator.Instance; returnerer ikke alle forekomster
  • EnumAvailableSqlServers eller SqlDataSourceEnumerator - Forkert liste over tilgængelige databaser
  • Optælling af SQL-servere
  • Programmatisk liste over SQL-servere


  1. Databasestyring og overvågning for PostgreSQL 12

  2. Sådan oprettes tjekbegrænsning på flere kolonner i SQL Server - SQL Server / TSQL vejledning del 84

  3. Oracle Database 21c til Linux-platforme

  4. Hvordan bruger man dynamiske kolonnenavne i en UPDATE- eller SELECT-sætning i en funktion?