sql >> Databasteknik >  >> RDS >> Sqlserver

SqlDataSourceEnumerator.Instance.GetDataSources() hittar inte lokal SQL-server 2008-instans

Du hoppar över servrar som inte är namngivna instanser. Ändra din 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;
}

Observera:SqlDataSourceEnumerator.Instance.GetDataSources() har nackdelar:

  • Med förbehåll för brandväggsregler (blockerad TCP/IP 1433 och UDP 1434)
  • Hittar inte SQL-servrar om SQL-webbläsaren är avstängd
  • Hittar inte SQL-servrar om de är dolda
  • Listinnehåll garanteras inte att vara repeterbart (på grund av tidsgränser). Faktum är att ett efterföljande anrop kommer att ge en annan lista beroende på nätverkets I/O, serverprestanda, antalet servrar i nätverket och andra tidsberoende begränsningar

Flera källor säger att du måste göra två anrop till SqlDataSourceEnumerator.Instance.GetDataSources() ...

Refs:

  • SqlDataSourceEnumerator.Instance; returnerar inte alla instanser
  • EnumAvailableSqlServers eller SqlDataSourceEnumerator - Felaktig lista över tillgängliga databaser
  • Räkna upp SQL-servrar
  • Programmatisk lista över SQL-servrar


  1. Tips och knep för implementering av databasrollbaserade åtkomstkontroller för MariaDB

  2. skickar in tabellnamnet som plsql-parameter

  3. Sekvens som standardvärde för en kolumn

  4. Skapa en relation i SQL Server 2017