2010-08-28 62 views
2

我想枚举安装在本地计算机上的所有SQL Server实例。我正在使用SmoApplication.EnumAvailableSqlServers(true)。但是,只显示SQL Server Express 2005实例。 2008年的默认实例根本没有显示!Smo在2005实例存在时不显示2008 SQL Server实例

我用SqlServerRegistrations.EnumRegisteredServers()和SqlDataSourceEnumerator.Instance.GetDataSources()尝试了2个其他解决方案,但它们也不起作用。

还有关于这个(Can't enumerate SQL Server 2008 Registered Servers with SMO)的另一个问题,但不幸的是没有答案。

+0

我有一个非常类似的问题 - 我的问题是: http://stackoverflow.com/questions/3592401/smoapplication-enumavailablesqlservers-fails-to-return-all-servers 在我的案例,它是未返回的SQL 2005默认实例,以及名为SQL08的实例。 奇怪的是,我注意到停止SQL浏览器服务会检测到默认的SQL05实例,但是不会返回指定的SQL08实例。 我非常喜欢有人对此有所了解! – ChrisA 2010-08-30 03:42:01

+0

Chris,我在我的应用程序中做了解决方法 - 除此之外,我试图手动打开与默认实例的连接并查看它是否已成功打开。看起来,微软的常规方式并不是全部。 – Alex 2010-08-30 07:49:42

回答

1

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

ManagedComputer mc = new ManagedComputer(); 

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

我试过 - 昨天发生了 - 它根本没有返回任何实例!如果您有任何想法,请告诉我! (我的envt是Win7,SQL05/08,VS2010) – ChrisA 2010-08-30 03:43:45

+0

谢谢乔! – Alex 2010-08-30 07:47:47

+0

@Alex:这项技术是否适合您? – 2010-08-30 13:09:18

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 
+0

我知道我不想说“谢谢”,因此......但真的......非常感谢! :) – rauland 2012-02-11 04:11:09

相关问题