Dans le cadre du développement d’une application reposant sur l’utilisation d’une base de données, il est important de penser à la réutilisabilité de son code. Il n’est pas question de réécrire toute une application à chaque changement de moteur de BDD. Une des solution est donc de rajouter une couche intermédiaire entre la partie business et la base de donnée. Dans le pire des cas, seule cette couche est à réécrire.
En allant plus loin, il est possible d’intégrer les accès base dans une fabrique abstraite (factory). Microsoft nous a mâché le travail, depuis le framework .Net 2.0 le namespace System.Data.Common contient tout ce qu’il nous faut pour le faire facilement. Voici rapidement les types les plus important contenus dans ce namespace:
Conteneur de Factory. C’est à travers ce type, que l’on va pouvoir binder notre architecture abstraite à un provider spécifique. | |
Type implémenté pour chaque provider, c’est à travers un objet de ce type que l’on pourra instancier tous les types du provider choisi. | |
Type gérant la connexion à la base. | |
Type permettant d’envoyer des commandes (paramétrées ou nom) dans une DbConnection. | |
Retour de l’exécution d’une DbCommand (un peu l’équivalent des bons vieux recordsets d’antan…) |
Providers
- System.Data.SqlClient (SQL Server)
- System.Data.OleDb (MS Access)
- System.Data.OracleClient (Oracle DataBase)
D’autre providers sont disponibles sur internet, pour connaître ceux dont vous disposez sur votre machine vous pouvez soit jeter un oeil dans le fichier machine.config du framework à la section <DbProviderFactories>. Soit appeler la Méthode static GetFactoryClasses() du type DbConnectionFactory :
DataTable tab = DbProviderFactories.GetFactoryClasses();
foreach (DataRow row in tab.Rows)
{
foreach (DataColumn col in tab.Columns)
{
System.Console.WriteLine("{0} = {1} ;", col.ColumnName, row[col]);
}
Console.WriteLine(Environment.NewLine);
}
Aucun commentaire:
Enregistrer un commentaire