Using DBProviderFactories we can actually create a connection without knowing what is the underlying database.
Example
DbProviderFactory provider = DbProviderFactories.GetFactory(providerName);
The provider name can be placed in config file can have following
<add key="SQLDatabaseConnection" value="SqlServer">
<connectionStrings>
<add name="SqlServer" connectionString="data source=(local);Integrated Security=SSPI;Initial Catalog=NorthWind" providerName="System.Data.SqlClient"/>
</connectionStrings>
I can have a method
public IDbConnection ConnectionProvider(string providerName, string connectionString)
{
DbProviderFactory provider= DbProviderFactories.GetFactory(providerName);
IDbConnection connection=provider.CreateConnection();
connection.ConnectionString=connectionString;
return connection
}
this method can be called as follows
IDbConnection connection1=ConnectionProvider(ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings[DATABASE_CONNECTION_CONFIG_KEY]].providerName, ConfigurationManager.ConnectionStrings[ConfigurationManager.AppSettings[DATABASE_CONNECTION_CONFIG_KEY]].ConnectionString)
DATABASE_CONNECTION_CONFIG_KEY can be "SQLDatabaseConnection" for sql. Similarly we can have different connection string and different key for Oracle or Access or any other database.