2009-09-16 70 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