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

SqlDataSourceEnumerator.Instance.GetDataSources() non individua l'istanza locale del server SQL 2008

Stai saltando su server che non sono istanze denominate. Modifica il tuo codice:

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

Nota:SqlDataSourceEnumerator.Instance.GetDataSources() ha degli svantaggi:

  • Soggetto alle regole del firewall (TCP/IP 1433 e UDP 1434 bloccati)
  • Non trova SQL Server se il browser SQL è disattivato
  • Non trova SQL Server se sono nascosti
  • Elenca i contenuti non garantiti per essere ripetibili (a causa di timeout). In effetti, è molto probabile che una chiamata successiva fornisca un elenco diverso a seconda dell'I/O della rete, delle prestazioni del server, del numero di server sulla rete e di altri vincoli dipendenti dal tempo

Diverse fonti affermano che devi effettuare 2 chiamate a SqlDataSourceEnumerator.Instance.GetDataSources() ...

Rif:

  • SqlDataSourceEnumerator.Instance; non restituisce tutte le istanze
  • EnumAvailableSqlServers o SqlDataSourceEnumerator - Elenco errato dei database disponibili
  • Enumerare i server SQL
  • Elenco programmatico di SQL Server