Version intégrale : Data Access Application Block
Présentation de l’entrerpise Library
Microsoft et Avanade ont sorti fin janvier 2005 une librairie téléchargeable gratuitement à partir de la MSDN : l’Entreprise Library. On nous a présenté cette librairie comme un package regroupant les applications blocks existants (Data Access Application Block, Caching Application Block, Configuration Application Block, Cryptography, Logging, Exception et Security). Mais cette librairie va plus loin dans le sens où vous allez avoir une meilleure interconnexion entre ces applications blocks comme le montre le schéma ci-dessous :

(Schéma fournit par Microsoft)
Le package Entreprise Library, vous propose aussi un outil de configuration que nous verrons dans cet article lors de la configuration de notre Data Access Application Block.
Présentation du Data Access Application Block
Le Data Access Application Block est l’un des tout premiers applications blocks qui va vous permettre premièrement de respecter les guidelines de Microsoft pour la connexion à une base, mais aussi de réduire sensiblement votre code pour faire appel notamment à vos procédures stockées.
Nombreux sont d’entres vous sûrement qui ont utilisé cet application block dès sa première version, première version qui était exclusivement dédiée à SqlServer. Cette dépendance à SqlServer a été supprimée déjà depuis quelques versions du daab avec la mise en place d’une Factory qui va vous permettre de choisir votre fournisseur comme le montre le schéma ci-dessous :

Quelques constatations après lecture de ce schéma :
-
« SqlDatabase » pour SqlServer
-
« OracleDatabase »
-
« Db2Database »
-
Pour définir la liste de vos instances gérées au sein de votre application, il vous faudra définir un fichier de configuration « dataConfiguration.config ». Lors de l’appel de la factory, vous devez spécifier le nom de votre instance définie dans le fichier de configuration. Si aucune instance n’est définie lors de l’appel de la factory, « DatabaseFactory » vous renverra l’instance par défaut définie dans votre fichier de configuration.
-
Pour spécifier des paramètres à votre commande, vous devrez passer un command Wrapper que vous pourrez récupérer à partir de l’instance de votre factory.
Installation du package Entreprise Library
L’entreprise library est téléchargeable à partir de l’adresse suivante :
Une fois l’installer lancé, il vous compilera toutes les assemblies des applications blocks dans le dossier C:\Program Files\Microsoft Enterprise Library\bin et les sources des projets dans le dossier : C:\Program Files\Microsoft Enterprise Library\src. Vous avez donc le choix pour l’implémentation de l’entreprise library au sein de votre solution d’y insérer directement les références aux assemblies ou d’ajouter les projets.
Entreprise Library Configuration
Entreprise Library vous livre dans son package un outil de configuration se basant sur le Configuration Application Block.
Cet outil va permettre de charger votre fichier de configuration et de l’éditer en créant par la même occasion les fichiers de configuration pour chaque application block avec notamment le fichier de configuration « dataConfiguration.config » pour le Data Access Application Block.
Cet outil « EntLibConfig.exe » se trouve dans le dossier : « C:\Program Files\Microsoft Enterprise Library\bin ».
Lors du lancement de l’éditeur, vous avez la possibilité de charger directement votre fichier de configuration :

Une fois le fichier chargé, un nœud application (que vous pouvez renommer) sera crée. A partir du menu contextuel sur ce nœud, vous allez pouvoir choisir de créer une section de configuration pour un application block :

Voici le nœud par défaut proposé par l’éditeur pour le Data Access Application Block :

Vous allez pouvoir à partir du nœud « Connection Strings » gérer vos chaînes de connexion en spécifiant la base de données dans l’attribut « database » et le serveur dans « server ».
Pour gérer une autre base de données, comme par exemple de base de données Oracle, il vous faudra tout d’abord ajouter un type de base « Oracle », ajouter une chaîne de connexion puis enfin une instance liée à cette chaîne de configuration :


Une fois la phase de configuration terminée, il vous suffira d’enregistrer et l’éditeur créera votre fichier de configuration « dataConfiguration.config » et mettra à jour votre fichier de configuration (app.config ou web.config).
Utilisation du Data Access Application Block
Avant de pouvoir appeler les méthodes vous permettant d’exécuter une commande, remplir un Dataset…, vous devez créer une instance du fournisseur spécifié dans le fichier de configuration à partir de la factory :
Database db = DatabaseFactory.CreateDatabase();
Pensez à bien faire le using suivant :
using Microsoft.Practices.EnterpriseLibrary.Data;
Une fois votre objet database crée, vous allez pouvoir appeler vos méthodes. Certaines de ces méthodes sont déjà connues des anciennes versions de l’application block comme :
-
« ExcecuteDataset » : Retourne un dataset à partir d’une commande
-
« ExecuteNonQuery » : Execute une commande.
-
« ExecuteReader » : Retourne un DataReader
Vous allez avoir aussi de nouvelles méthodes comme :
-
« LoadDataset » : Vous remplit un Dataset. Assez pratique notamment pour spécifier le nom des tables de votre dataset à remplir.
-
« UpdateDataSet » : Permet de mettre à jour des données à partir de votre Dataset en spécifiant un wrapper pour la commande Delete, Insert et Update.
Quelques bouts de code
1.2.1. Appel de la facotry:
Pour faire retourner l'instance du provider par défaut définit dans votre fichier de configuration, il vous suffit d'appeler la méthode "CreateDatabase" de "DatabaseFactory". Dans le cas où vous souhaitez appeller une autre instance (une instance de type oracle par exemple), vous avez la possibilité d'apeller une surcharge de la méthode "CreateDatabase" pour spécifier le nom de l'instance comme ceci :
Database db = DatabaseFactory.CreateDatabase("UsersDBOracleInstance");
1.2.2. Retourner un Dataset non typé :
Database db = DatabaseFactory.CreateDatabase();
DataSet dsUsers = db.ExecuteDataSet(CommandType.StoredProcedure, "Sp_GetUsers");
1.2.3. Remplir un Dataset typé :
DSUsers dsUsers = new DSUsers();
Database db = DatabaseFactory.CreateDatabase();
db.LoadDataSet(CommandType.StoredProcedure, "Sp_GetUsers",dsUsers,new string[] {"Users"});
1.2.4. Créer un wrapper de commande :
Database db = DatabaseFactory.CreateDatabase();
DBCommandWrapper cmdInsertUser = db.GetStoredProcCommandWrapper("Sp_InsUser");
cmdInsertUser.AddInParameter("@Login",DbType.String,"vlad");
1.2.5. Mise à jour
Database db = DatabaseFactory.CreateDatabase();
DBCommandWrapper cmdInsertUser = db.GetStoredProcCommandWrapper("Sp_InsUser");
cmdInsertUser.AddInParameter("@Login",DbType.String,"Login",DataRowVersion.Current);
DBCommandWrapper cmdDeleteUser = db.GetStoredProcCommandWrapper("Sp_DelUser");
cmdDeleteUser.AddInParameter("@UserID",DbType.Int32,"UserID",DataRowVersion.Current);
DBCommandWrapper cmdUpdateUser = db.GetStoredProcCommandWrapper("Sp_UptUser");
cmdUpdateUser.AddInParameter("@UserID",DbType.Int32,"UserID",DataRowVersion.Current);
cmdUpdateUser.AddInParameter("@Login",DbType.String,"Login",DataRowVersion.Current);
db.UpdateDataSet(
dsUsers,
"Users",
cmdInsertUser,
cmdUpdateUser,
cmdDeleteUser,
UpdateBehavior.Standard);