Список экземпляров SQL Server 2016

Я использую приведенный ниже код в своем приложении Windows для получения локальных серверов, когда я использовал SQL Server 2012, он работал без ошибок, но когда я загрузил 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;
    }
}

person T.Hajjar    schedule 02.01.2017    source источник
comment
Я думаю, вам могут понадобиться DLL из установки SQL Server 2016.   -  person TT.    schedule 02.01.2017
comment
Я их уже добавил.   -  person T.Hajjar    schedule 02.01.2017
comment
У вас есть String.IsNullOrEmpty(instance.Name) ? instance.Parent.Name : instance.Parent.Name. Вы уверены, что именно это хотели написать?   -  person TT.    schedule 02.01.2017


Ответы (1)


У меня была такая же проблема. Эти шаги помогли мне.

Ссылка на Microsoft.SqlServer.ConnectionInfo увеличена до версии 13.x.x.x (через Добавить ссылку -> и найти более раннюю версию в Расширениях). Тот же шаг для Microsoft.SqlServer.Management.Sdk.Sfc и Microsoft.SqlServer.Smo.

Увеличенной версии для Microsoft.SqlServer.SqlWmiManagement не нашел. Поэтому я удалил ссылку на эту сборку и через просмотр нашел C:\Program Files\Microsoft SQL Server\130\SDK\Assemblies\Microsoft.SqlServer.SqlWmiManagement.dll.

Это все.

person user7519831    schedule 05.02.2017