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();
此时只显示网络实例。它没有显示任何本地实例。当我使用
SmoApplication.EnumAvailableSqlServers(true);
SmoApplication.EnumAvailableSqlServers(true);
则返回空白数据表。
我在不同的电脑上经常遇到同样的问题,我没有找到任何解释。看起来问题在某种程度上与本地机器上的防火墙,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浏览器设置为启动模式,并在所有它们中选择自动启动类型