列出网络上的可用SQL Server

时间:2014-07-28 16:11:17

标签: 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"]));
} 

但是,这对listBox没有任何补充。在调试时,我发现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);
        }

2 个答案:

答案 0 :(得分:1)

来自SqlDataSourceEnumerator.Instance.GetDataSources的文档:

  

检索包含有关所有可见 SQL Server 2000或SQL Server 2005实例的信息的DataTable。

尝试使用SMO,尤其是SmoApplication.EnumAvailableSqlServers方法

答案 1 :(得分:-1)

以下方法

SqlDataSourceEnumerator.Instance.GetDataSources()
  

检索包含有关所有可见SQL的信息的DataTable   Server 2000或SQL Server 2005实例。

MSDN中说明。

所以我假设你的网络上既没有2000也没有2005 sql server实例。你怎么能克服这个?

您可以使用SMO。我找到了这种方法here

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

路径如下:

  • 对于64位Windows 7:[您的驱动器]:\ Program Files(x86)\ Microsoft SQL 服务器\ 100 \ SDK \装配\ Microsoft.SqlServer.Smo.dll
  • 对于32位Windows 7:[您的驱动器]:\ Program Files \ Microsoft SQL 服务器\ 100 \ SDK \装配\ Microsoft.SqlServer.Smo.dll

然后你可以得到你想要的如下:

DataTable dataTable = SmoApplication.EnumAvailableSqlServers(true);
相关问题