当前上下文中不存在名为 'SqlDataSourceEnumerator' 的名称。

3
在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;,但我遇到了以下错误:

Error CS0103 The name 'SqlDataSourceEnumerator' does not exist in the current context

为什么会发生这种情况?


2
你是否加入了 using System.Data.Sql;SqlDataSourceEnumerator 类 - user12031933
是的,我刚刚做了,但什么也没改变。。 - Ted Kon
在项目的引用中,是否有System.Data.dll程序集(它会默认添加到每个新的Framework或Console项目中,但可以手动删除)?[适用于(不包括Core)](https://learn.microsoft.com/en-us/dotnet/api/system.data.sql.sqldatasourceenumerator?view=netframework-4.8#applies-to)。 - user12031933
1
我发现在项目资源管理器中无法引用程序集,意识到我使用的项目类型可能不正确。我创建了一个C#的Windows窗体应用程序,现在使用System.Data.Sql似乎没问题了...谢谢! - Ted Kon
1个回答

4

目前为止,SqlDataSourceEnumerator未被任何.NET Core或.NET 5版本实现。这是因为.NET Framework版本依赖于本地C++实现,.NET团队需要重新实现它作为托管代码以适应他们的设计目标。如果/当它被实现时,它将在Microsoft.Data.SqlClient包中。

有一篇讨论涵盖了dotnet/SqlClient github存储库的这个问题:

请注意,这一点自2017年初就已经知道了,最后一次提到任何解决方案是从Jul 2020

在此之前,您必须依靠.NET Framework来使用SqlDataSourceEnumerator的任何应用程序,或找到扫描SQL服务器的替代方法


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接