Module ADO2 - (C# et VB)

[ Retour Accueil ]

Les accès aux données

Durée de réalisation estimée : 21H00

Objectifs

Public et pré-requis

ce module s'adresse aux développeurs qui connaissent la programmation du Framework 2 avec le langage VB ou C# (module FRM-VB, FRM-CS ou niveau équivalent).

Sommaire

Ce module se compose de 4 chapitres :

  1. Les ADO .NET : un premier aperçu
  2. Interfaces WinForms liées aux données
  3. Les objets (API) ADO .NET
  4. Le DataSet à la loupe
[ Commander (modules C#) ]     [ Commander (modules VB) ]

Présentation

1. Les ADO .NET : un premier aperçu

Que ce soit pour un développement Windows, pour une application web ou dans un projet à destination d'appareils mobiles de type Pocket PC, vous aurez rapidement besoin d'accéder à des données externes dans vos applications. Ces données résideront généralement dans une base de données, mais elles peuvent également provenir d'un fichier XML ou d'objets métier spécifiques. À cet effet, le Framework offre – sous la dénomination ADO .NET – toute une hiérarchie d'objets, située dans l'espace de noms System.Data.

ADO .NET arrive à maturité avec la version 2.0 du Framework. Les objets fondamentaux comme DataSet et DataTable qui existaient déjà dans les versions antérieures ont finalement peu évolué en apparence, mais ils ont été améliorés avec le recul donné par la version 1.x. Ainsi, le DataSet gagne en performance par une nouvelle gestion des index et par la possibilité d'une sérialisation binaire plutôt que XML, ce qui réduit les volumes de données à faire transiter dans une application n-tiers. De même, lorsque des données d’une DataTable doivent être stockées individuellement, c’est désormais possible indépendamment du DataSet, c'est-à-dire avec une taille optimisée.

Scénario du chapitre

Un bref historique vous permettra tout d'abord de mieux cerner les objectifs de la philosophie ADO .NET, nouvelle par rapport aux "ADO classiques". Viendront ensuite quelques rappels sur les notions inhérentes aux bases de données. Si ces notions vous sont familières, vous pouvez naturellement vous rendre directement à la section consacrée aux principes de base de ADO .NET, afin de faire connaissance avec les premiers concepts importants.

Avant de traiter les aspects programmation, il nous semblait important d'illustrer les gains de productivité apportés par cette nouvelle version de Visual Studio dans la construction d'une interface "orientée données". D'autant que l'environnement de développement favorise la découverte graphique des objets ADO .NET, à l’aide d’assistants, sans avoir à écrire de code. Malgré la simplicité offerte par cette approche, qui peut s’avérer suffisante dans des petites applications ou des maquettes, il faut néanmoins garder à l’esprit qu’il est indispensable de savoir comment contrôler les opérations avec du code pour développer des applications plus conséquentes, généralement architecturées en couches organisées autour d’objets métiers. Un objet métier est simplement une vue logique d’une entité spécifique associée au domaine de l’application, comme un client, un produit ou une commande dans une application commerciale.

Ce chapitre doit donc être considéré comme un premier tour d’horizon des objets ADO, alors que les deux chapitres suivants nous permettrons d’entrer dans les détails.

Points abordés

[ Retour en début de page ]

2. Interfaces WinForms liées aux données

De nouveaux composants graphiques viennent s'interfacer au DataSet présenté au chapitre précédent. Ces objets améliorent la productivité du développeur de manière assez considérable.

Scénario du chapitre

En terme d’interface, bien que les contrôles (composants visuels) diffèrent dans les applications Web, nous verrons dans les chapitres consacrés aux ASP .NET, qu’ils reposent sur des mécanismes analogues. C’est notamment le cas des sources de données, qui nous permettront de construire des formulaires simples ou de type maître/détail par des opérations de Drag and Drop.

Les différents objets rencontrés, seront examinés à chaque étape, pour illustrer les mécanismes de transfert d'informations entre les composants visuels de votre application et les sources de données sous-jacentes.

Vous verrez également comment afficher, alimenter, formater et programmer une grille de données, grâce au contrôle DataGridView, composant central d'une interface graphique liée aux données, sous Windows.

Vous apprendrez, finalement, à imprimer des données sur un état comportant un graphique, à l'aide de Crystal Reports.

Points abordés

[ Retour en début de page ]

3. Les objets (API) ADO .NET

Le chapitre précédent nous a permis de faire connaissance avec la philosophie du DataSet, c'est-à-dire du mode déconnecté et avec les facilités offertes par Visual Studio, notamment au travers des sources de données disponibles rappelons-le, dans une application de type Windows. Cependant, pour être en mesure de tirer pleinement parti des ADO, indépendamment du type d’application développé, la programmation directe des objets sous-jacents offrira souvent une meilleure maîtrise des opérations à réaliser.

De plus, en reprenant le schéma des différentes techniques d’accès à une base de données présentées dans le précédent chapitre, les deux premières branches correspondant à l’exécution directe d’une commande ou à la récupération de données avec un DataReader, sont uniquement réalisables par programmation.

L'objectif de ce chapitre est donc de présenter l’API permettant de manipuler les objets ADO .NET avec du code en se concentrant essentiellement sur ces deux branches qui couvrent de nombreux besoins. Les techniques liées à l’utilisation d’un DataSet feront l’objet du chapitre suivant.

Scénario du chapitre

Puisqu’il est incontournable (nous verrons néanmoins comment créer dynamiquement un DataSet sans connexion au chapitre suivant), nous commenceront ce chapitre par l'objet Connection, qui constitue le point de départ de tout traitement sur une base de données.

L’objet Command sera ensuite mis en œuvre pour exécuter une instruction SQL de mise à jour (de type INSERT, UPDATE ou DELETE) ou une procédure stockée acceptant des paramètres. Si vous n’êtes pas familiarisé avec le langage SQL, vous trouverez en annexe de chapitre une présentation des principales instructions à connaitre.

Puis, dans la même lignée, nous ferons connaissance avec l’objet DataReader spécialisé dans la lecture de données fournies par une instruction SQL SELECT.

Pour illustrer l‘utilisation de ces différents objets, nous continuerons d’utiliser la même base Access Voyages2010.mdb. Aussi, une section consacrée à SQL Server a été prévue ensuite, de façon à identifier les nuances de programmation par rapport à Access.

Le niveau d'interaction avec SQL Server 2005 et ses nouvelles fonctionnalités a bien sûr été amélioré. Nous terminerons ce chapitre en montrant comment travailler avec ce système de base de données.

Points abordés

4. Le DataSet à la loupe

Dans les ADO classiques, l'objet central se dénommait Recordset. S'il procurait une très grande souplesse pour la réalisation de la plupart des opérations, il présentait pour principal inconvénient de stocker les données dans un format propriétaire, spécifique à l'environnement Windows, ce qui le rendait inexploitable dès lors qu'il s'agissait de dialoguer avec un système Linux, par exemple.

Les objets ADO .NET font partie des innovations majeures du Framework .NET, et marquent une rupture avec les technologies antérieures : le Recordset a été abandonné au profit d'un nouvel objet DataSet – que vous avez déjà expérimenté aux précédents chapitres – chargé de stocker et de gérer les données au format standard XML. Ceci étant vu comme une réponse aux besoins d'interopérabilité croissants des applications manipulant des données structurées.

Disons-le sans détour, dès à présent : il n'y a aucune comparaison possible entre un Recordset et un DataSet ! Ce dernier est, en effet, bien plus qu'un simple jeu d'enregistrements, et c'est tout l'objectif de ce chapitre que d'en illustrer la richesse…

Scénario du chapitre

Après avoir présenté l'objet DataSet dans ses grandes lignes, nous découvrirons la classe DataTable, objet central du DataSet, mais qui peut désormais est manipulé de manière indépendante. Pour ce faire, une table sera créée puis alimentée de manière dynamique, de façon à en manipuler les colonnes (objets DataColumn) puis les lignes de données (objets DataRow) sans avoir besoin de définir une source de données.

Nous reprendrons ensuite notre base exemple pour alimenter un DataSet. Pour ce faire, nous ferons connaissance avec le DataAdapter chargé d'établir la liaison avec les données.

Une fois le DataSet rempli, nous décrirons les techniques qui permettent d'en manipuler le contenu localement, à savoir : tris et filtrage à l'aide d'un objet DataView, ainsi que les opérations d'édition de données (ajout, suppression et modification). Nous verrons également comment définir et exploiter des relations au sein d'un DataSet.

Toutes les opérations d'édition de données étant réalisées localement, l'étape suivante consiste à synchroniser les mises effectuées avec la base de données. Ceci nous amènera naturellement à présenter les différentes méthodes de résolution des éventuels conflits rencontrés si des modifications ont été réalisées entre temps sur le même jeu données, par d'autres utilisateurs.

Nous poursuivrons avec la notion de "DataSet fortement typé", qui étend la classe DataSet par diverses propriétés et méthodes. Contrairement au DataSet non typé, c'est-à-dire générique, un DataSet typé autorise la détection d'erreurs à la compilation (et non pas à l'exécution), et aussi une meilleure productivité en cours de développement.

Suite à ces différentes explications, nous reparlerons du nouvel objet TableAdapter rencontré dès le premier chapitre, dont nous pourrons mieux comprendre le fonctionnement afin d'en tirer le meilleur parti.

Nous terminerons ce chapitre par un exemple permettant d'illustrer les mariages possibles entre un DataSet et XML.

Points abordés

[ Retour en début de page ]