SmoApplication.EnumAvailableSqlServers不检索本地服务器实例

本文关键字:服务器 实例 检索 EnumAvailableSqlServers SmoApplication | 更新日期: 2023-09-27 18:08:42

我在本地系统上使用windows-7 Sp-1和Sql server 2012。服务器系统采用Windows Server 2008 R2 Sp-1和Sql Server 2012。当我使用

SmoApplication.EnumAvailableSqlServers();

此时只显示网络实例。它没有显示任何本地实例。当我使用

SmoApplication.EnumAvailableSqlServers(true);

则返回空白数据表。

SmoApplication.EnumAvailableSqlServers不检索本地服务器实例

我在不同的电脑上经常遇到同样的问题,我没有找到任何解释。看起来问题在某种程度上与本地机器上的防火墙,UDP数据包和SQL Server浏览器服务有关(AFAIK, SmoApplication.EnumAvailableSqlServers甚至为本地实例使用SQL Server浏览器,而SQL Server浏览器反过来使用广播数据包来发现SQL Server服务。

我实现的解决方案使用SMO中的ManagedComputer类:

    private const String defaultMsSqlInstanceName = "MSSQLSERVER";
    public String[] GetLocalSqlServerInstances()
    {
        return new ManagedComputer()
            .ServerInstances
            .Cast<ServerInstance>()
            .Select(instance => String.IsNullOrEmpty(instance.Name) || instance.Name == defaultMsSqlInstanceName ? 
                instance.Parent.Name : Path.Combine(instance.Parent.Name, instance.Name))
            .ToArray();
    }

而且,它的工作速度比SmoApplication.EnumAvailableSqlServers(true)快。

我最近遇到了一个类似的问题。我找不到任何已安装的SQL server本地实例,所以我打开了SQL server浏览器。这似乎解决了我的问题。我使用的代码如下所示:

            ServiceController oController = new ServiceController("SQL Server Browser");
            if (oController.Status.Equals(ServiceControllerStatus.Stopped) || oController.Status.Equals(ServiceControllerStatus.Paused))
                oController.Start();

这段代码使用了系统。ServiceProcess组装。

从开始菜单转到服务,将Sql Server(MSSQLSERVER),Sql Server管理(MSSQLSERVER)和Sql Server浏览器设置为启动模式,并在所有它们中选择自动启动类型