gpt4 book ai didi

c# - SqlDataSourceEnumerator.Instance.GetDataSources() 没有找到本地 SQL server 2008 实例

转载 作者:太空狗 更新时间:2023-10-29 23:54:31 25 4
gpt4 key购买 nike

我使用以下代码列出所有远程和本地 SQL Server 实例:

public static void LocateSqlInstances()
{
using( DataTable sqlSources = SqlDataSourceEnumerator.Instance.GetDataSources())
{
foreach(DataRow source in sqlSources.Rows )
{
string instanceName = source["InstanceName"].ToString();

if (!string.IsNullOrEmpty(instanceName))
{
Console.WriteLine(" Server Name:{0}", source["ServerName"]);
Console.WriteLine(" Instance Name:{0}", source["InstanceName"]);
Console.WriteLine(" Version:{0}", source["Version"]);
Console.WriteLine();
}
}
Console.ReadKey();
}
}

在我的本地机器上运行代码。该代码可以找到并列出已安装的 SQL Server Express 实例(版本 9.0.5000),但无法列出其他 SQL Server 实例(版本 10.0.1600)。

我在 Internet 上做了很多研究,并确保 (1) Sql Browser 正在运行并且 (2) UDP 端口 1434 已打开。

有人知道为什么吗?谢谢。

最佳答案

您正在跳过非命名实例的服务器。修改您的代码:

public class SqlServerInstance
{
public string ServerInstance { get; set; }
public string Version { get; set; }
}

public static List<SqlServerInstance> LocateSqlInstances()
{
List<SqlServerInstance> results = new List<SqlServerInstance>();

using (DataTable sqlSources = SqlDataSourceEnumerator.Instance.GetDataSources())
{
foreach (DataRow source in sqlSources.Rows)
{
string servername;
string instancename = source["InstanceName"].ToString();

if (!string.IsNullOrEmpty(instancename))
{
servername = source["ServerName"].ToString() + '\\' + instancename;
}
else
{
servername = source["ServerName"].ToString();
}

results.Add(new SqlServerInstance (){ ServerInstance = servername, Version = source["Version"].ToString() });
}
}

return results;
}

请注意:SqlDataSourceEnumerator.Instance.GetDataSources()有缺点:

  • 遵守防火墙规则(阻止 TCP/IP 1433 和 UDP 1434)
  • 如果 SQL 浏览器关闭,则找不到 SQL Server
  • 如果 SQL Server 是隐藏的,则不会找到它们
  • 列表内容不保证可重复(由于超时)。事实上,后续调用很可能会根据网络 I/O、服务器性能、网络上的服务器数量和其他与时间相关的约束给出不同的列表

一些消息来源说您必须调用 2 次 SqlDataSourceEnumerator.Instance.GetDataSources() ...

引用:

关于c# - SqlDataSourceEnumerator.Instance.GetDataSources() 没有找到本地 SQL server 2008 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6824188/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com