我正在尝试枚举本地计算机上安装的所有SQL Server实例。我正在使用SmoApplication.EnumAvailableSqlServers(true)。但是,仅显示SQL Server Express 2005实例。默认的2008实例根本没有显示!
我使用SqlServerRegistrations.EnumRegisteredServers()和SqlDataSourceEnumerator.Instance.GetDataSources()尝试了其他2个解决方案,但它们也不起作用。
还有另外一个问题(Can't enumerate SQL Server 2008 Registered Servers with SMO),但遗憾的是没有答案。
答案 0 :(得分:3)
找到问题的解决方案here
解决方案:将ProviderArchitecture属性显式设置为目标SQL Server的体系结构。
如果您没有显式设置ProviderArchitecture属性,它将假定正在运行的进程。如果应用程序的主机进程与目标服务器上已安装的SQL Server版本的体系结构不匹配,则ServerInstances集合将为空。这是由于单独的x86和x64 WMI提供程序以及SQL Server如何注册实例。
Try
Dim objManagedComputer As New ManagedComputer("target_servername")
objManagedComputer.ConnectionSettings.ProviderArchitecture = ProviderArchitecture.Use64bit
Dim objServerInstance As ServerInstance
For Each objServerInstance In objManagedComputer.ServerInstances
MsgBox(objServerInstance.Name)
Next
Catch ex As Exception
MsgBox(ex.Message)
End Try
答案 1 :(得分:1)
这是您可以尝试使用ManagedComputer Class(命名空间:Microsoft.SqlServer.Management.Smo.Wmi)的另一种选择。
ManagedComputer mc = new ManagedComputer();
foreach (ServerInstance si in mc.ServerInstances)
{
Console.WriteLine(si.Name);
}