2009-09-16 43 views
1

我的工作站上安装了SQL Server 2005 Management Studio。此后我安装了SQL Server 2008工作站工具并删除了SQL Server 2005工具。我现在正在编写一个c#程序,它在管理工作室中迭代我注册的服务器。问题是,它正在遍历2005年工具中的旧列表(现在已被卸载),而不是我的2008注册服务器列表。无法枚举带有SMO的SQL Server 2008注册服务器

我认为这可能是一个程序集引用问题,所以我检查我的SMO程序集引用是否指向新工具。我使用:

  • Microsoft.SqlServer.ConnectionInfo
  • Microsoft.SqlServer.Management.Sdk.Sfc
  • Microsoft.SqlServer.Smo
  • Microsoft.SqlServer.SqlEnum

我已检查组件是10.0版本。

我的C#代码段,做的工作是:

using System; 
using System.Collections.Generic; 
using System.Text; 
using Microsoft.SqlServer.Management.Smo; 
using Microsoft.SqlServer.Management.Common; 
using Microsoft.SqlServer.Management.Smo.RegisteredServers; 

public static void DiscoverServers() 
    { 
     RegisteredServer[] rsvrs = SqlServerRegistrations.EnumRegisteredServers(); 
     foreach (RegisteredServer rs in rsvrs) 
     { 
      Console.WriteLine(rs.Parent.Name + ", " + rs.ServerInstance); 

     } 
    } 

关于如何解决此问题的任何想法?我只是使用错误的SMO代码?

干杯, 马克。

回答

0

您的代码完全正常。 我的猜测是,你的SQL服务器没有公开浏览本身的问题。 确保“SQL Server Browser”Windows服务正在运行,并且在SQL Server配置上启用了服务器浏览。

+0

代码工作正常,但它列出了已注册2005 SSMS的服务器,但未列出2008 SSMS。我所有的SQL Server都具有相同的配置,所以它不能这么做 - 这与我的工作站设置或代码有关,但我不确定具体是什么。我已经检查过隐藏是关闭的,并且SQL浏览器正在我已命名实例的机器上运行。任何其他想法? – 2009-09-17 07:44:47

+0

有两两件事你可以检查/尝试:用EnumRegisteredServers的重载的方法用布尔设置为true 1.尝试: RegisteredServer[] rsvrs = SqlServerRegistrations.EnumRegisteredServers(true); 2.禁用防火墙,因为它阻止发现,即使SQL服务器在同一台机器上 – 2009-09-17 08:26:57

+0

鲍里斯没有防火墙,如果我尝试过载它,我得到一个错误: 无重载方法“EnumRegisteredServers” – 2009-09-17 13:59:42