sql >> Database >  >> RDS >> Sqlserver

SqlDataSourceEnumerator.Instance.GetDataSources() kan lokale SQL Server 2008-instantie niet vinden

U slaat servers over die geen benoemde instanties zijn. Pas uw code aan:

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

Let op:SqlDataSourceEnumerator.Instance.GetDataSources() heeft nadelen:

  • Onderhevig aan firewallregels (geblokkeerd TCP/IP 1433 en UDP 1434)
  • Kan geen SQL-servers vinden als de SQL-browser is uitgeschakeld
  • Kan SQL-servers niet vinden als ze verborgen zijn
  • De inhoud van de lijst is niet gegarandeerd herhaalbaar (vanwege time-outs). In feite is de kans groot dat een volgende oproep een andere lijst geeft, afhankelijk van de netwerk-I/O, de serverprestaties, het aantal servers op het netwerk en andere tijdsafhankelijke beperkingen

Verschillende bronnen zeggen dat je 2 aanroepen moet doen naar SqlDataSourceEnumerator.Instance.GetDataSources() ...

Referenties:

  • SqlDataSourceEnumerator.Instance; niet alle instanties retourneren
  • EnumAvailableSqlServers of SqlDataSourceEnumerator - Onjuiste lijst met beschikbare databases
  • SQL-servers opsommen
  • Programmatische lijst van SQL-servers


  1. SQL - Opgeslagen procedure aanroepen voor elk record

  2. Een relatie maken in SQL Server 2017

  3. CLEAR SCREEN - Oracle SQL Developer snelkoppeling?

  4. Kijk uit voor een tabel met nieuwe records in de sql-database