ASP.NET: Comment créer une connexion à partir d'un web.config ConnectionString?

Comment voulez-vous construire un DbConnection basé sur un nom du fournisseur?

Échantillon nom du fournisseurs

  • Système.Les données.SqlClient
  • Système.Les données.OleDb
  • Système.Les données.Odbc
  • FirebirdSql.Les données.FirebirdClient

j'ai chaînes de connexion stocké sur mon serveur IIS web.fichier de configuration:

<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"/>

Vous pouvez le voir, ils utilisent tous les différents fournisseurs. Quand vient le temps pour moi de créer une connexion, j'ai besoin de savoir quel type de DbConnection pour créer, par exemple:

  • SqlConnection
  • OleDbConnection
  • OdbcConnection
  • FbConnection

La connectionStrings entrées contient un providerNamemais ce ne sont pas les noms de DbConnection les classes descendantes, mais semblent être un espace de noms

Comment puis-je construire un DbConnection basé sur une chaîne de 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();

}

source d'informationauteur Ian Boyd