【问题标题】:Smo does not show 2008 SQL Server instances when 2005 instances exist当 2005 个实例存在时,Smo 不显示 2008 个 SQL Server 实例
【发布时间】:2010-08-28 22:14:56
【问题描述】:

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

【问题讨论】:

  • 我有一个非常相似的问题 - 我的问题是:stackoverflow.com/questions/3592401/… 在我的情况下,它是未返回的 SQL 2005 默认实例,而是命名的 SQL08 实例。奇怪的是,我注意到停止 SQL Browser 服务会检测到默认的 SQL05 实例,但随后不会返回命名的 SQL08 实例。我也非常希望有人能对此有所了解!
  • 克里斯,我在我的应用程序中解决了问题——除此之外,我试图手动打开与默认实例的连接,看看它是否已成功打开。似乎常规的 Microsoft 方法并不适用。

标签: sql-server smo


【解决方案1】:

找到解决您问题的方法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

【讨论】:

  • 我知道我不应该说“谢谢”……但真的……非常感谢! :)
【解决方案2】:

这是您可以尝试使用ManagedComputer Class(命名空间:Microsoft.SqlServer.Management.Smo.Wmi)的另一种选择。

ManagedComputer mc = new ManagedComputer();

foreach (ServerInstance si in mc.ServerInstances)
{
      Console.WriteLine(si.Name);
}

【讨论】:

  • 我试过了 - 昨天发生了 - 它根本不返回任何实例!如果您知道为什么,请告诉我! (我的环境是Win7,SQL05/08,VS2010)
  • 是的,它返回 2008 SQL server 的默认实例,但是,没有关于 2005 server 的 2 个实例。所以我必须使用各种方法进行一些混合搜索。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-05
  • 1970-01-01
  • 2013-03-23
  • 2011-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多