6
votes

Sqldatasourceenumerator.instance.getdataSources () ne localisez pas l'instance locale SQL Server 2008

J'utilise le code suivant pour répertorier toutes les instances de serveur SQL distantes et locales: xxx

exécutant le code sur ma machine locale. Le code peut trouver et répertorier une instance SQL Server Express (version 9.0.5000) installée mais n'a pas réussi à répertorier l'autre instance SQL Server (version 10.0.1600).

J'ai fait beaucoup de recherches sur Internet et assurez-vous que (1) le navigateur SQL est en cours d'exécution et (2) le port UDP 1434 est ouvert.

Tout le monde sait pourquoi? Merci.


0 commentaires

4 Réponses :


17
votes

Vous sautez sur des serveurs qui ne sont pas nommés instances. Modifiez votre code:

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


0 commentaires

8
votes

Merci beaucoup à Mitch pour la grande réponse qu'il met ensemble. Cependant, ce que j'ai fini par faire est comme ce qui suit:

J'ai deux méthodes distinctes pour obtenir une instance de serveur local et distant respectivement. Les instances locales sont extraites du registre. Vous devez rechercher à la fois des ruches WOW64 et WOW3264 pour obtenir à la fois SQL Server 2008 (64 bits) et SQL Server Express (32 bits)

Voici le code que j'utilise: xxx


xxx

à la fin, je viens de fusionner la liste d'instances distante et la liste d'instances locales pour produire le résultat final.


2 commentaires

Le Studio Visual ne reconnaît pas la fonction: FormatLocalSQlinStannames (Ref Instances64bit); FormatLocalSQlinStannames (Ref Instances 32bit);


Que font "FormatLocalSQlinSancensannames"? Pouvez-vous s'il vous plaît poster le code?



3
votes

Quelques personnes ont besoin de savoir sur les méthodes de GetDataSources et SqldataSourceenumerator. Si le nom d'instance est la valeur par défaut - InstanceCename sera vide! [Pourquoi .. Je ne sais pas, pourquoi ne puis-je pas spécifier Verbose, je ne sais pas que le gars de MS qui l'a écrit ... Arrrgh]

ServerName: Nom du serveur.

InstanceCename: Nom de l'instance de serveur. vide si le serveur est en cours d'exécution comme instance par défaut.

est clustered indique si le serveur fait partie d'un cluster.

version version du serveur (8.00.x pour SQL Server 2000 et 9.00.x pour SQL Server 2005).

d'ici: https: // msdn.microsoft.com/en-us/library/system.data.sql.sqldatasourceenumerator.getdataSources(v=vs.110).aspx


0 commentaires

1
votes
var registryViewArray = new[] { RegistryView.Registry32, RegistryView.Registry64 };

foreach (var registryView in registryViewArray)
{
    using (var hklm = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, registryView))
    using (var key = hklm.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server"))
    {
        var instances = (string[]) key?.GetValue("InstalledInstances");
        if (instances != null)
        {
            foreach (var element in instances)
            {
                if (element == "MSSQLSERVER")
                    Console.WriteLine(System.Environment.MachineName);
                else
                    Console.WriteLine(System.Environment.MachineName + @"\" + element);

            }
        }
    }
}

Console.ReadKey();

0 commentaires