如何使用C#代码获取可用SQL服务器列表?

14

我创建了一个桌面应用。在应用程序启动时,我希望显示所有可用的本地PC上的SQL Server实例列表,并允许选择要连接的SQL Server名称。

是否有任何方法可以获取所有可用的本地PC上的SQL Server实例名称列表?

非常感谢。


2
可能是重复的问题:如何在C#中使用SMO列出可用的SQL Server实例? - Remus Rusanu
3个回答

19
string myServer = Environment.MachineName;

DataTable servers = SqlDataSourceEnumerator.Instance.GetDataSources();
for (int i = 0; i < servers.Rows.Count; i++)
{
    if (myServer == servers.Rows[i]["ServerName"].ToString()) ///// used to get the servers in the local machine////
     {
         if ((servers.Rows[i]["InstanceName"] as string) != null)
            CmbServerName.Items.Add(servers.Rows[i]["ServerName"] + "\\" + servers.Rows[i]["InstanceName"]);
         else
            CmbServerName.Items.Add(servers.Rows[i]["ServerName"].ToString());
      }
  }

4
非常感谢,Pranay先生。它百分之百有效,但必须修改 servers.Rows["ServerName"].ToString() 的代码为 **servers.Rows[i]["ServerName"].ToString()**。不过,这正是我想要的。 - Jameel
CmbServerName是什么? - Inside Man
@InsideMan,很可能CmbServerName是一个Winform ComboBox。为什么这很重要? - Gabriel Marius Popescu
@GabrielMariusPopescu 组合框并不重要。 - Inside Man

4
        //// Retrieve the enumerator instance, and then retrieve the data sources.
        SqlDataSourceEnumerator instance = SqlDataSourceEnumerator.Instance;
        DataTable dtDatabaseSources = instance.GetDataSources();

        //// Populate the data sources into DropDownList.            
        foreach (DataRow row in dtDatabaseSources.Rows)
            if (!string.IsNullOrWhiteSpace(row["InstanceName"].ToString()))
                Model.DatabaseDataSourceNameList.Add(new ExportWizardChooseDestinationModel
                {
                    DatabaseDataSourceListItem = row["ServerName"].ToString()
                        + "\\" + row["InstanceName"].ToString()
                });

2
尝试
SqlDataSourceEnumerator.Instance.GetDataSources()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接