I am trying to get a list of all SQL Server data sources using .NET Core 3.1. I've followed the instructions located here, but CanCreateDataSourceEnumerator
always returns false. I've tried two different methods to get the list, but they both fail at the if statement.
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"]);
//}
I have added an App.config that looks like this:
<?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>