Blog ENI : Toute la veille numérique !
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici
Accès illimité 24h/24 à tous nos livres & vidéos ! 
Découvrez la Bibliothèque Numérique ENI. Cliquez ici

L’accès aux données

Principes d’une base de données

Les bases de données constituent de nos jours un élément incontournable pour la quasi-totalité des applications. Elles se substituent à l’utilisation de fichiers, trop lourde et trop contraignante pour le développeur. Elles permettent aussi de partager l’information plus simplement, tout en offrant une excellente performance.

L’utilisation de bases de données nécessite la connaissance de deux prérequis : certains éléments de terminologie fréquemment utilisés ainsi que quelques notions de manipulation des données à l’aide du langage SQL.

1. Terminologie

La connaissance des termes décrits ci-dessous est indispensable pour la bonne compréhension de ce chapitre.

Table

Une table est une unité logique de stockage correspondant à un type de donnée. Sa structure est définie par des champs (colonnes), et elle contient des enregistrements (lignes). L’équivalent logique d’une table en C# est une classe.

Enregistrement

Un enregistrement est un élément d’une table possédant une valeur pour chaque colonne de la table. L’équivalent C# d’un enregistrement serait un objet, donc une instance de classe.

Champ

Un enregistrement contient plusieurs champs. Chacun de ces champs représente une donnée composant l’enregistrement. L’équivalent C# d’un champ est une propriété.

Ces trois éléments sont souvent représentés sous la forme d’un tableau, ce qui permet de mieux s’approprier et manipuler ces concepts.

images/08_001.png

Clé primaire

Une clé primaire est un identifiant unique pour chaque enregistrement d’une table. Elle est reconnue par la base de données...

ADO.NET

ADO.NET est un ensemble de types fournis par la plateforme .NET dont l’objectif commun est la manipulation de bases de données. Cette brique, fournie depuis les débuts de .NET, est la fondation de l’accès aux données avec C#.

1. Présentation

Les types qui composent ADO.NET sont répartis en deux catégories, définies de telle sorte qu’il est très simple de séparer le requêtage de la base de données et la manipulation des données dans l’application.

Les traitements qui doivent être effectués en lien direct avec une base de données sont implémentés par des types spécifiques à un fournisseur de données. Il est possible, en utilisant ces types, de récupérer des jeux de données ou de supprimer des enregistrements, par exemple.

Les jeux de données récupérés peuvent aussi être stockés localement et manipulés totalement indépendamment de leur source grâce à certains types dédiés. Ce mode de fonctionnement est appelé mode déconnecté. Il permet notamment de produire des portions de code communes à tous les types de bases de données, ce qui améliore la fiabilité et la maintenabilité des applications en réduisant le nombre de lignes...

Utiliser ADO.NET en mode connecté

Le mode connecté est le mode originel d’utilisation des bases de données. Il permet de rester connecté en permanence à la source de données, ce qui présente certains avantages :

  • Il est très simple d’utilisation. En effet, dans ce mode, la connexion à la source de données est créée au démarrage de l’application et détruite lorsque l’utilisateur la quitte.

  • Il permet d’avoir en permanence des données à jour.

  • Il permet de gérer plus simplement les accès concurrentiels. Les utilisateurs étant connectés en permanence, il est plus simple de déterminer lequel utilise les données.

Le mode connecté pose tout de même quelques problèmes non négligeables :

  • Il impose le maintien d’une connexion réseau permanente entre le client et le serveur de base de données. À l’heure de la mobilité, il est particulièrement délicat d’imposer cela à un utilisateur.

  • Le serveur de base de données doit gérer de multiples connexions permanentes simultanément, ce qui peut induire une utilisation excessive de ressources. 

1. Connexion à une base de données

Avant toute exécution de requête, il est nécessaire d’ouvrir une connexion vers le serveur de base de données. Cette connexion est créée à l’aide de la classe SqlConnection. Lors de l’instanciation d’une connexion, il est nécessaire d’initialiser certaines valeurs relatives à la base de données. Celles-ci sont spécifiées au travers d’une chaîne de connexion.

a. Chaînes de connexion

Une chaîne de connexion est une chaîne de caractères contenant les informations nécessaires à l’établissement d’une connexion avec une base de données. Ces informations sont spécifiées sous la forme de couples mot-clé/valeur séparés par des points-virgules, dans lesquels le mot-clé est un nom de paramètre reconnu par le fournisseur de données.

Une analyse de la chaîne est effectuée lors de son affectation à la propriété ConnectionString...

Utiliser ADO.NET en mode déconnecté

Dans un mode déconnecté, la connexion au serveur de base de données n’est pas permanente. Ceci permet de libérer des ressources qui pourraient être utilisées par une autre application ou par un autre client de la base de données.

Ce mode de fonctionnement implique qu’il faut conserver une copie locale des données sur lesquelles on souhaite travailler. Pour ceci, il est possible de recréer localement une structure semblable à celle d’une base de données.

1. DataSet et DataTable

Les classes principales permettant de travailler en mode déconnecté sont DataSet, DataTable, DataRow et DataColumn.

a. Description

Les différentes classes utilisées pour le mode déconnecté sont les contreparties .NET des éléments de la structure d’une base de données.

DataSet

Un objet DataSet est un conteneur, semblable logiquement à une base de données. C’est lui qui contiendra la totalité des données de l’ensemble sur lequel on souhaite travailler.

DataTable

Le type DataTable représente, comme son nom l’indique, une table. Un objet DataTable, bien que pouvant exister indépendamment, est logiquement contenu dans un DataSet.

DataColumn

La classe DataColumn est le pendant .NET des colonnes SQL. Les DataTable possèdent plusieurs DataColumn tout comme les tables en base de données possèdent plusieurs colonnes.

DataRow

Les objets DataRow sont les véritables conteneurs de données. Chaque DataRow correspond à un enregistrement dans une DataTable.

Ces quatre classes ne sont pas les seuls types représentant des éléments de la structure d’une base de données. On peut aussi trouver les types UniqueConstraint, ForeignKeyConstraint ou DataRelation représentant respectivement les contraintes d’unicité, les clés étrangères et les relations entre objets DataTable.

b. Remplissage d’un DataSet à partir d’une base de données

Pour travailler avec les données localement, il est nécessaire de rapatrier les données du serveur vers un DataSet. Pour cela, chaque fournisseur de données propose un DbDataAdapter permettant des échanges bidirectionnels entre...

Utiliser les transactions

Une transaction est un élément utilisé dans une base de données afin de définir qu’un ensemble d’opérations doit être exécuté de manière atomique. Le groupe de requêtes est considéré comme indivisible, de telle sorte que si l’une d’elles échoue, la totalité est annulée et la base retrouve l’état qu’elle avait avant le début de la transaction. Cette opération d’annulation est souvent nommée rollback, tandis que l’opération de validation finale résultant de l’exécution correcte de chacune des requêtes est appelée commit.

Les transactions sont donc très souvent utilisées lorsque plusieurs requêtes de modification de données doivent être effectuées mais que l’échec de l’une d’elles entraîne une incohérence des données. Un exemple pourrait être la gestion des réservations dans un avion ou un train. Lorsque toutes les places sont réservées, les compagnies aériennes maintiennent une liste d’attente pour pouvoir revendre aisément une place pour laquelle un passager annule sa réservation. Au moment de l’annulation, on se retrouve donc avec deux actions à effectuer :

  • Annulation...