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
Vous devez vous connecter pour publier un commentaire.
Si vous aller dans cette voie, je pense que vous aurez envie d'utiliser le DbProviderFactories classe pour obtenir une DbProviderFactory que vous pouvez utiliser pour construire la connexion. Je n'ai pas testé ce code, mais je pense que cela fonctionnera. Il est possible que vous devrez peut-être rechercher le nom du fournisseur à l'aide de la GetFactoryClasses méthode sur la DbProviderFactories de la classe et de l'utilisation de la InvariantName.
Découvrez ce blog, hanselman sur l'ajout de construire des types pour les différentes chaînes de connexion noms, on dirait qu'il peut s'adapter à ce que vous voulez accomplir dans un autre moyen que d'utiliser le fournisseur de types.
Si le providerName pour le nom de connexion (dev, test, prod) ne change jamais pourquoi je ne peux pas vous faire un switch sur le connectionName param pour votre méthode et de définir la providerName instance de cette façon?