如何使用c#从后面的代码中找到SQL Server实例名称和服务器名称?

可能重复:
SqlDataSourceEnumerator.Instance.GetDataSources()找不到本地SQL Server 2008实例

我使用下面的代码来获取本地机器中的所有实例名称和服务器名称,但它似乎只返回一个实例; 如何在我的本地机器上获取实例名称和服务器名称的所有列表?

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()) { if ((servers.Rows[i]["InstanceName"] as string) != null) { CmbServerName.Visibility = Visibility.Visible; CmbServerName.Items.Add(servers.Rows[i]["ServerName"] + "\\" + servers.Rows[i]["InstanceName"]); } else { CmbServerName.Visibility = Visibility.Visible; CmbServerName.Items.Add(servers.Rows[i]["ServerName"]); } } } 

提前致谢!

获取已安装的sql server实例名称的另一种方法是读取您的计算机注册表。 它将从本地计算机获取所有sql实例。

 RegistryKey rk = Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Microsoft\Microsoft SQL Server"); String[] instances = (String[])rk.GetValue("InstalledInstances"); if (instances.Length > 0) { foreach (String element in instances) { if (element == "MSSQLSERVER") Console.WriteLine(System.Environment.MachineName); else Console.WriteLine(System.Environment.MachineName + @"\" + element); } Console.ReadLine(); } 

这可能不是它,但值得一试。 SQL Server Browser服务是否在您的计算机上运行?

GetDataSource()检索从您的机器可见的所有实例。 ServerName是托管信息的机器的名称,并且您的计算机上只显示一个信用额。

粗体部分是什么意思:“如何在我的本地机器中获取实例名称和服务器名称的所有列表”? 如果要查看计算机上可见的每个服务器,则必须删除if语句

 if (myServer == servers.Rows[i]["ServerName"].ToString()) 

因为只有一台服务器具有您的本地计算机名称,因此您无法获取任何其他服务器名称。

请注意文档报告

由于SqlDataSourceEnumerator用于在网络上定位数据源的机制的性质, 该方法不会始终返回可用服务器的完整列表,并且每次调用时列表可能不同 。 如果您计划使用此function让用户从列表中选择服务器,请确保您始终提供一个选项以键入不在列表中的名称,以防服务器枚举未返回所有可用的服务器。 此外,此方法可能需要花费大量时间来执行,因此在性能至关重要时要小心调用它。

所以可能是由于这个问题。

另一种解决方案:

Microsoft.SqlServer.Management.Smo.SmoApplication.EnumAvailableSqlServers