¿Cómo se construye una conexión Db basada en un nombre de proveedor ?ASP.NET: cómo crear una conexión desde un web.config ConnectionString?
Muestra nombre del proveedor de s
- System.Data.SqlClient
- System.Data.OleDb
- System.Data.Odbc
- FirebirdSql.Data.FirebirdClient
tengo cadenas de conexión almacenadas en el archivo web.config de mi servidor IIS:
<connectionStrings>
<add name="development"
connectionString="Provider = IBMDA400; Data Source = MY_SYSTEM_NAME; User Id = myUsername; Password = myPassword;"
providerName="System.Data.OleDb" />
<add name="live"
connectionString="usd=sa;pwd=password;server=deathstar;"
providerName="System.Data.Odbc" />
<add name="testing"
connectionString="usd=sa;pwd=password;server=deathstar;"
providerName="System.Data.SqlClient" />
<add name="offline"
connectionString="Server=localhost;User=SYSDBA;Password=masterkey;Charser=NONE;Database=c:\data\mydb.fdb"
providerName="FirebirdSql.Data.FirebirdClient"/>
Se puede ver que todos utilizan diferentes proveedores. Cuando llega el momento para mí para crear una conexión, tengo que saber qué tipo de DbConnection para crear, por ejemplo:
- SqlConnection
- OleDbConnection
- OdbcConnection
- FbConnection
El Las entradas de connectionStrings contienen un providerName, pero estos no son los nombres de las clases descendientes de DbConnection, pero parecen ser un espacio de nombres
¿Cómo puedo convertir construir una conexión Db basada en una cadena providerName?
public DbConnection GetConnection(String connectionName)
{
//Get the connectionString infomation
ConnectionStringSettings cs =
ConfigurationManager.ConnectionStrings[connectionName];
if (cs == null)
throw new ConfigurationException("Invalid connection name \""+connectionName+"\");
//Create a connection based on the provider
DbConnection conn = new DbConnection();
}
Esto es exactamente lo que se necesita. El ingrediente secreto es el "nombre del proveedor" que se usa en algún lugar del sistema, y esa es la colección DbProviderFactories. Cada proveedor se registra con los DbProviderFactories; así es como lo encuentras. –