我正在尝试使用 .NET Core 3.1 获取所有 SQL Server 数据源的列表。我已按照此处的说明进行操作,但CanCreateDataSourceEnumerator
始终返回 false。我尝试了两种不同的方法来获取列表,但它们都在 if 语句中失败。
using (SqlConnection con = new SqlConnection())
{
PropertyInfo dbProviderFactoryProperty = con.GetType().GetProperty("DbProviderFactory", BindingFlags.NonPublic | BindingFlags.Instance);
var factory = dbProviderFactoryProperty.GetValue(con) as DbProviderFactory;
if (factory.CanCreateDataSourceEnumerator)
{
var instance = factory.CreateDataSourceEnumerator();
await Task.Run(() => table = instance.GetDataSources());
foreach (DataRow row in table.Rows)
Console.WriteLine("{0}\\{1}", row["ServerName"], row["InstanceName"]);
}
}
//DbProviderFactories.RegisterFactory("Microsoft.Data.SqlClient", SqlClientFactory.Instance);
//var factory = DbProviderFactories.GetFactory("Microsoft.Data.SqlClient");
//if (factory.CanCreateDataSourceEnumerator)
//{
// var instance = factory.CreateDataSourceEnumerator();
// await Task.Run(() => table = instance.GetDataSources());
// foreach (DataRow row in table.Rows)
// Console.WriteLine("{0}\\{1}", row["ServerName"], row["InstanceName"]);
//}
我添加了一个 App.config,如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.data>
<DbProviderFactories>
<add name="Microsoft SqlClient Data Provider"
invariant="Microsoft.Data.SqlClient"
description="Microsoft SqlClient Data Provider for SQL Server"
type="Microsoft.Data.SqlClient.SqlClientFactory, Microsoft.Data.SqlClient" />
</DbProviderFactories>
</system.data>
</configuration>