在 Visual Studio 中的 C# .net 5 程序中,我正在测试使用 SqlDataSourceEnumerator 的代码
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;
}
虽然我已经使用了System.Data;我明白了
错误 CS0103 当前上下文中不存在名称“SqlDataSourceEnumerator”
为什么会出现这种情况?
目前
SqlDataSourceEnumerator
尚未针对任何版本的 .NET Core 或 .NET 5 实现。这是因为 .NET Framework 版本依赖于本机 C++ 实现,.NET 团队需要重新实现它作为托管代码来满足其设计目标。如果/当它被实现时,它将位于 Microsoft.Data.SqlClient
包中。
dotnet/SqlClient
github 存储库上有一个涵盖此内容的讨论:
请注意,这一点自 2017 年初以来就已为人所知,最后一次提及任何解决方案是在 2020 年 7 月。
在此实现之前,对于任何绝对必须使用
SqlDataSourceEnumerator
的应用程序,您都必须依赖 .NET Framework,或者找到替代方法来扫描 SQL 服务器。
您需要添加“Microsoft.Data.Sql”的nuget包