名称“SqlDataSourceEnumerator”在当前上下文中不存在

问题描述 投票:0回答:2

在 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”

为什么会出现这种情况?

c# sqldatasource
2个回答
4
投票

目前

SqlDataSourceEnumerator
尚未针对任何版本的 .NET Core 或 .NET 5 实现。这是因为 .NET Framework 版本依赖于本机 C++ 实现,.NET 团队需要重新实现它作为托管代码来满足其设计目标。如果/当它被实现时,它将位于
Microsoft.Data.SqlClient
包中。

dotnet/SqlClient
github 存储库上有一个涵盖此内容的讨论:

请注意,这一点自 2017 年初以来就已为人所知,最后一次提及任何解决方案是在 2020 年 7 月

在此实现之前,对于任何绝对必须使用

SqlDataSourceEnumerator
的应用程序,您都必须依赖 .NET Framework,或者找到替代方法来扫描 SQL 服务器。


0
投票

您需要添加“Microsoft.Data.Sql”的nuget包

© www.soinside.com 2019 - 2024. All rights reserved.