当存在2005实例时,Smo不显示2008 SQL Server实例

时间:2010-08-28 22:14:56

标签: sql-server smo

我正在尝试枚举本地计算机上安装的所有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),但遗憾的是没有答案。

2 个答案:

答案 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);
}