首页 > 解决方案 > 获取 .NET Core 中的 SQL Server 列表

问题描述

我正在尝试使用 .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>

标签: c#.net-coresqlclientdbproviderfactories

解决方案


推荐阅读