2017-01-02 4 views
0

J'utilise le code ci-dessous dans mon application Windows pour obtenir des serveurs locaux, lorsque j'utilisais SQL Server 2012, il fonctionnait sans erreur, mais lorsque j'ai téléchargé SQL Server 2016, j'ai reçu l'exception:Instances de liste SQL Server 2016

Exception: Une exception s'est produite dans SMO lors de la tentative de gestion d'un service. Exception interne: impossible d'extraire des données pour cette demande.

Le code:

public List<string> findLocalServers() 
{ 
    var servers = new List<string>(); 
    try 
    { 
     var serverCollection = new ManagedComputer().ServerInstances.Cast<ServerInstance>().Select(instance => String.IsNullOrEmpty(instance.Name) ? 
             instance.Parent.Name : instance.Parent.Name) 
            .ToArray(); 

     foreach (var server in serverCollection.Where(server => !servers.Contains(server))) 
     { 
      servers.Add(server); 
     } 

     return servers; 
    } 
    catch (Exception ex) 
    {    
     return null; 
    } 
} 
+0

Je pense que vous pourriez avoir besoin des DLL de l'installation de SQL Server 2016. –

+0

Je les ai déjà ajoutés. –

+0

Vous avez 'String.IsNullOrEmpty (instance.Name)? instance.Parent.Name: instance.Parent.Name'. Es-tu sûr que c'est ce que tu voulais écrire? –

Répondre

0

J'ai eu le même problème. Ces étapes m'ont aidé.

Référence à Microsoft.SqlServer.ConnectionInfo augmenté à la version 13.x.x.x (via Ajouter une référence -> et trouver la version supérieure dans Extensions). Même étape pour Microsoft.SqlServer.Management.Sdk.Sfc et Microsoft.SqlServer.Smo.

Je n'ai pas trouvé de version augmentée pour Microsoft.SqlServer.SqlWmiManagement. J'ai donc supprimé la référence à cet assemblage et via parcourir j'ai fondé C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.SqlServer.SqlWmiManagement.dll.

C'est tout.