3

可能重复:
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"]);

            }
        }
}

提前致谢!

4

4 回答 4

5

获取已安装的 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();
            }
于 2012-11-06T10:52:57.707 回答
1

另一种解决方案:

Microsoft.SqlServer.Management.Smo.SmoApplication.EnumAvailableSqlServers

于 2012-11-06T11:14:38.287 回答
1

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

于 2012-11-06T10:56:14.237 回答
1

GetDataSource()检索从您的机器可见的所有实例。ServerName是托管 istance 的机器的名称,看起来您的机器上只有一个 istance 。

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

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

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

请注意,文档报告

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

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

于 2012-11-06T10:56:19.077 回答