2017-01-02 3 views
0

내 Windows 응용 프로그램에서 로컬 서버를 얻으려면 아래 코드를 사용합니다. SQL Server 2012를 사용할 때 오류없이 작동하지만 SQL Server 2016을 다운로드하면 예외가 발생합니다.SQL Server 2016 목록 인스턴스

예외 : 서비스를 관리하는 동안 SMO에서 예외가 발생했습니다. 내부 예외 :이 요청에 대한 데이터를 검색하지 못했습니다.

강령 :

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

SQL Server 2016 설치에서 DLL이 필요할 수도 있습니다. –

+0

이미 추가했습니다. –

+0

'String.IsNullOrEmpty (instance.Name)? instance.Parent.Name : instance.Parent.Name'입니다. 당신이 쓰고 싶은 것이 맞습니까? –

답변

0

나는 같은 문제가 없었다. 이 단계들이 나를 도왔다.

Microsoft.SqlServer.ConnectionInfo에 대한 참조가 추가 참조를 통해 버전 13.x.x.x로 확장되었으며 (확장에서 상위 버전 찾기). Microsoft.SqlServer.Management.Sdk.SfcMicrosoft.SqlServer.Smo에 대해서도 같은 단계입니다.

Microsoft.SqlServer.SqlWmiManagement에 대한 향상된 버전을 찾지 못했습니다. 그래서이 어셈블리에 대한 참조를 제거하고 찾아보기를 통해 C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.SqlServer.SqlWmiManagement.dll을 설립했습니다.

그게 전부입니다.