我在本地系统上使用windows-7 Sp-1和Sql server 2012。 和服务器系统上的Windows Server 2008 R2 Sp-1和Sql server 2012。 当我使用
SmoApplication.EnumAvailableSqlServers();
那时它只显示网络实例。 它不显示任何本地实例。 当我使用
SmoApplication.EnumAvailableSqlServers(true);
然后它返回空白数据表。 在这种情况下该怎么做。
答案 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启动类型