Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Can';t使用SMO枚举SQL Server 2008注册的服务器_C#_Sql Server_Smo - Fatal编程技术网

C# Can';t使用SMO枚举SQL Server 2008注册的服务器

C# Can';t使用SMO枚举SQL Server 2008注册的服务器,c#,sql-server,smo,C#,Sql Server,Smo,我的工作站上安装了SQLServer2005ManagementStudio。此后,我安装了SQL Server 2008工作站工具并删除了SQL Server 2005工具。我现在正在写一个c#程序,它迭代我在ManagementStudio中注册的服务器。问题是,它正在遍历我2005年工具(现在已经卸载)中的旧列表,而不是我2008年注册的服务器列表 我认为这可能是程序集引用的问题,所以我检查SMO程序集引用是否指向新工具。我正在使用: Microsoft.SqlServer.Connec

我的工作站上安装了SQLServer2005ManagementStudio。此后,我安装了SQL Server 2008工作站工具并删除了SQL Server 2005工具。我现在正在写一个c#程序,它迭代我在ManagementStudio中注册的服务器。问题是,它正在遍历我2005年工具(现在已经卸载)中的旧列表,而不是我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;

有没有办法解决这个问题?我只是使用了错误的SMO代码吗

干杯,
标记。

您的代码完全正确。 我的猜测是,问题出在您的SQL server上,它没有公开自己以供浏览。
确保“SQL Server Browser”Windows服务正在运行,并且在SQL Server配置上启用了服务器浏览功能。

该代码工作正常,但它列出了在2005 SSM(而非2008 SSM)中注册的服务器。我所有的SQL Server都有相同的配置,所以不可能是这样-这与我的工作站设置或代码有关,但我不确定具体是什么。我已检查Hide是否已关闭,SQL浏览器是否正在我命名实例的计算机上运行。还有其他想法吗?你还可以检查/尝试两件事:1。尝试使用EnumRegisteredServer的重载方法,布尔值设置为true:
RegisteredServer[]rsvrs=SqlServerRegistrations.EnumRegisteredServer(true)2。禁用防火墙,因为它会阻止发现,即使SQL server在同一台机器上,也没有防火墙,如果我尝试重载它,我会得到一个错误:“EnumRegisteredServers”方法没有重载我的意思是使用这个方法:这里还有一些示例:请让我知道它是否有帮助Hi Boris-我使用的代码与您提供的链接完全相同。它仍然枚举我的SSMS 2005注册服务器,而不是我的SSMS 2008注册服务器。
    public static void DiscoverServers()
    {
        RegisteredServer[] rsvrs = SqlServerRegistrations.EnumRegisteredServers();
        foreach (RegisteredServer rs in rsvrs)
        {
            Console.WriteLine(rs.Parent.Name + ", " + rs.ServerInstance);

        }
    }