C# 列出网络上可用的SQL Server

C# 列出网络上可用的SQL Server,c#,sql,sql-server,C#,Sql,Sql Server,我尝试使用以下代码将可用SQL服务的列表显示到列表框中: DataTable dt = SqlDataSourceEnumerator.Instance.GetDataSources(); foreach (DataRow dr in dt.Rows) { listBox3.Items.Add(string.Concat(dr["ServerName"], "\\", dr["InstanceName"])); } 但是,这不会向列表框添加任何内容。在调试时,我发现dt.Rows.C

我尝试使用以下代码将可用SQL服务的列表显示到列表框中:

DataTable dt = SqlDataSourceEnumerator.Instance.GetDataSources();
foreach (DataRow dr in dt.Rows)
{
    listBox3.Items.Add(string.Concat(dr["ServerName"], "\\", dr["InstanceName"]));
} 
但是,这不会向列表框添加任何内容。在调试时,我发现dt.Rows.Cout实际上等于零,尽管我的计算机上通过SQLEXPRESS 2010有一个服务器。有什么想法吗

好的,谢谢大家的帮助。以下代码最适合我:

        ManagedComputer mc = new ManagedComputer();
        mc.ConnectionSettings.ProviderArchitecture = ProviderArchitecture.Use64bit;
        foreach (ServerInstance si in mc.ServerInstances)
        {
            listBox3.Items.Add(Environment.MachineName + "\\" + si.Name);
        }

从以下文件中:

检索包含有关所有可见SQL Server 2000或SQL Server 2005实例的信息的数据表

尝试使用以下方法,尤其是方法

SqlDataSourceEnumerator.Instance.GetDataSources()
检索包含有关所有可见SQL的信息的DataTable 服务器2000或SQL Server 2005实例

如表1所述

因此,我假设您的网络既没有2000 sql server实例,也没有2005 sql server实例。你如何克服这个问题

你可以用。我找到了这种方法

最初,您必须添加对dll项目的引用,
Microsoft.SqlServer.smo.dll
,该dll包含您将使用的类型:

路径如下所示:

  • 对于64位Windows 7:[您的驱动器]:\Program Files(x86)\Microsoft SQL 服务器\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll
  • 对于32位Windows 7:[您的驱动器]:\Program Files\Microsoft SQL 服务器\100\SDK\Assemblies\Microsoft.SqlServer.Smo.dll
然后你可以得到你想要的,如下所示:

DataTable dataTable = SmoApplication.EnumAvailableSqlServers(true);

表示“检索一个包含所有可见SQL Server 2000或SQL Server 2005实例信息的数据表。”如果downvoter能够解释我的错误,我将不胜感激。提前谢谢你。我没有投反对票,但尽管我回答了这个问题,这并没有多大帮助。我猜OP也想知道如何获得其他SQL Server实例的列表。噢,谢谢!你知道检索SQL Server 2012及以下版本信息的代码吗?@Roger欢迎你。我会尝试搜索,我会尽快回来。@罗杰,请看我更新的帖子,如果适合你的情况,请告诉我。提前谢谢。@twn您在大约51分钟前发布了一条关于我的答案的评论,现在您已将其删除。既然我不能马上回答你,我现在就做。是的,我们的答案非常相似。然而,正如你会注意到的那样,随着时间的推移,我们在最初的帖子中的时差不到半分钟。后来罗杰问他怎样才能解决他的问题。我做了一点调查,发现了答案中包含的链接。当我回来重新编辑我的帖子时,有几分钟你提到了这个方法。这并不意味着我复制/粘贴了你的答案。@twn我决不会像你的答案那样否决正确的答案,尽管你已经否决了我的答案,因为你相信我复制/粘贴了你的答案。我把判断权留给我们答案的读者。@Christos不,你没有复制/粘贴我的答案,但你的答案是多余的,我已经发布了。