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

时间:2013-04-12 09:34:16

标签: c# networking sql-server-2012

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

代码

SmoApplication.EnumAvailableSqlServers();

那时它只显示网络实例。 它不显示任何本地实例。 当我使用

代码

SmoApplication.EnumAvailableSqlServers(true);

然后它返回空白数据表。 在这种情况下该怎么做。

3 个答案:

答案 0 :(得分:2)

我在不同的计算机上不时遇到同样的问题,我没有找到任何解释。看起来这个问题与本地机器上的防火墙,UDP数据包和SQL Server Browser服务有某种关系(AFAIK,SmoApplication.EnumAvailableSqlServers甚至为本地实例使用SQL Server Browser,而SQL Server Browser又使用广播数据包来发现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)快 希望这会有所帮助。

答案 1 :(得分:0)

我最近遇到了类似的问题。我找不到任何已安装的SQL Server本地实例,因此我打开了SQL Server Browser。这似乎解决了我的问题。我使用的代码如下所示:

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

此代码使用System.ServiceProcess程序集。

答案 2 :(得分:0)

从开始菜单转到服务,并在启动模式下设置Sql Server(MSSQLSERVER),Sql Server Agmnt(MSSQLSERVER)和Sql Server Browser,并在所有菜单中选择atuomatic启动类型