2

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

代码

SmoApplication.EnumAvailableSqlServers();

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

代码

SmoApplication.EnumAvailableSqlServers(true);

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

4

3 回答 3

2

我不时在不同的计算机上遇到同样的问题,但我没有找到任何解释。看起来问题与防火墙、UDP 数据包和本地计算机上的 SQL Server Browser 服务有关(AFAIK,SmoApplication.EnumAvailableSqlServers即使对于本地实例也使用 SQL Server Browser,而 SQL Server Browser 反过来使用广播数据包来发现 SQL Server 服务。

我实施的解决方法使用ManagedComputer了 SMO 中的类:

    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).
希望这可以帮助。

于 2013-04-12T09:45:52.407 回答
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 程序集。

于 2013-09-23T14:56:18.457 回答
0

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

于 2019-01-23T23:19:14.993 回答