2013-04-16 41 views
0

我有一段代码应该返回安装在我的机器上的所有SQL Server实例。它看起来像这样:为什么我的方法没有返回任何有效的SQL Server实例?

DataTable dtLocalServers = SmoApplication.EnumAvailableSqlServers(true); 

foreach (DataRow dServer in dtLocalServers.Rows) 
{ 
    Console.WriteLine(dServer.ToString()); 
} 

它的工作,编译和运行。但是,生成的数据表并不是非常有用。它看起来像这样:

Name | Server | Instance | IsClustered | Version | IsLocal 
IAN-PC | IAN-PC |    | True  |   | True 

的问题是,虽然这会返回一个结果,这并没有给我关于服务器的任何信息。特别是,我试图获得版本(SQL Server 2008 Express R2或SQL Server Express 2012),我认为它应该在'Version'字段中。我知道这样一个事实,即我有两份本地运行的副本用于测试。

还有什么我可以做得到更好的结果吗?

编辑:IAN-PC是我的电脑的名字。我的计算机上有两个运行的SQL Server实例,IANSQLEXP(SQL Server 2008 Express R2)和SQLEXPRESS(SQL Server Express 2012)。在SQL Server配置管理器中,还有两个未运行的代理程序和一个未运行的SQL Server浏览器。

+1

您的表格具有'Version'作为列。如果服务器是集群的,它将不会返回一个版本。 – Romoku

+0

我明白那一部分。有没有其他的方式来检查服务器?我们希望将服务放在客户的计算机上,因此我们无法控制它们是否被群集,并且仍然想检查安装的内容。这可能是一个愚蠢的问题,我不熟悉SQL Server的工作原理。 – ijb109

+0

你的集群实例是一个命名实例吗? –

回答

0

这里的问题是SQL Server Browser在我的计算机上被禁用。我找到答案的帖子是here。从MSDN帮助的另一个有用的链接是here.感谢您的帮助,伙计们!

0

您可以枚举服务器并将它们变成List<Server>

var servers = 
    SmoApplication 
     .EnumAvailableSqlServers() 
     .AsEnumerable() 
     .Select(s => new Server(s[0].ToString())) //Server name is first column 
     .ToList(); 

您可以使用ServerVersion属性来获取服务器版本。

var unavailableServers= new List<Server>(); 
var activeServers = new List<Server>(); 
var tasks = new List<Task>(); 

foreach(var server in servers) 
{ 
    var task = 
     Task.Run(() => 
      { 
       try 
       { 

        server.ConnectionContext.Connect(); 
        server.ConnectionContext.Disconnect(); 
        activeServers.Add(server); 
       } 
       catch(ConnectionFailureException) 
       { 
        unavailableServers.Add(server); 
       } 
      }); 

    tasks.Add(task); 
} 

Task.WaitAll(tasks.ToArray()); 
+0

当我这样做的时候,我得到了和以前一样的结果(以服务器的形式),当我尝试获取版本时,我深入研究并得到一条消息,指出'base {System.SystemException} = {“Failed to连接到服务器IAN-PC。“}'。我觉得集群是这里的问题。 – ijb109

+0

您需要检查您是否可以访问服务器。检查我的编辑。 – Romoku

+0

我收到一个空的活动服务器列表。我不确定这里发生了什么,但它似乎将计算机名称作为服务器,也许这就是群集。无论如何,我觉得这种方法是行不通的:( – ijb109

相关问题