Search notes:

System.Data.Common.DbProviderFactories (class)

System.Data.Common.DbProviderFactories provides static methods to create instances of System.Data.Common.DbProviderFactory.

GetFactoryClasses

DbProviderFactories.GetFactoryClasses() returns a System.Data.DataTable that contains information about all installed providers that implement System.Data.Common.DbProviderFactory.
using System;
using System.Data;
using System.Data.Common;

static class Prg {

   public static void Main() {

      DataTable installedProviders = DbProviderFactories.GetFactoryClasses();

      foreach (DataRow provider in installedProviders.Rows) {
         Console.WriteLine("{0,-30} {1}",
           provider["InvariantName"        ],
           provider["Name"                 ]
        // provider["Description"          ],
        // provider["AssemblyQualifiedName"]
        );
      }
   }
}
Github repository .NET-API, path: /System/Data/Common/DbProviderFactories/GetFactoryClasses.cs
This example, when run, might print something like
System.Data.Odbc               Odbc Data Provider
System.Data.OleDb              OleDb Data Provider
System.Data.OracleClient       OracleClient Data Provider
System.Data.SqlClient          SqlClient Data Provider
System.Data.SqlServerCe.4.0    Microsoft SQL Server Compact Data Provider 4.0
IBM.Data.DB2                   IBM DB2 .NET Data Provider
IBM.Data.Informix              IBM Informix .NET Data Provider
IBM.Data.DB2.11.1.4040         IBM DB2 .NET Data Provider 11.1.4040
IBM.Data.Informix.11.1.4040    IBM Informix .NET Data Provider 11.1.4040
MySql.Data.MySqlClient         MySQL Data Provider
In PowerShell, getting this list is as easy as
PS C:\> [System.Data.Common.DbProviderFactories]::GetFactoryClasses()
The values returned by GetFactoryClasses() are found in the machine.config file, particularly under <system.data><DbProviderFactories>:
<?xml version="1.0"?>
<configuration>
  …
  <system.data>
    <DbProviderFactories>
      <add name="TQ84SQL Data Provider" invariant="TQ84.Data.TQ84Client" description=".Net Framework Data Provider for TQ84" type="TQ84.Data.TQ84Client.TQ84ClientFactory, TQ84.Data, Version=1.0.00.0, Culture=neutral, PublicKeyToken=fc9568a33b28e4d2" />
      <add name="…" … >
    </DbProviderFactories>
  </system.data>
  …
</configuration>

GetFactory

using System;
using System.Data.Common;
using System.IO;

static class Prg {

   static string csvFilePath = Directory.GetCurrentDirectory();

   static string provider =
         // "Microsoft.Jet.OLEDB.4.0"
            "Microsoft.ACE.OLEDB.12.0";

   static string connectionString       =
          $"Provider={provider};"       +
          $"Data Source={csvFilePath};" +
          $"Extended Properties='text';";

   public static void Main() {

      DbProviderFactory factory    = DbProviderFactories.GetFactory("System.Data.OleDb");
      DbConnection      connection = factory.CreateConnection();

      connection.ConnectionString  = connectionString;
      connection.Open();

      DbCommand         command    = factory.CreateCommand();
      command.Connection           = connection;
      command.CommandText          ="select * from data.csv";

      DbDataReader      reader     = command.ExecuteReader();

      while (reader.Read()) {
         Console.WriteLine($"{reader["id"]} {reader["txt"]}");
      }
   }
}
Github repository .NET-API, path: /System/Data/Common/DbProviderFactories/GetFactory/prog.cs

See also

Registering DB providers in machine.config.

Index