Atelier5_ADO.Net modifié pour Oracle

81
Manipuler des données de SQL Express et Access Page 1 sur 80

Transcript of Atelier5_ADO.Net modifié pour Oracle

Manipuler des donnes de SQL Express et Access

Page 1 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Sommaire1 INTRODUCTION.......................................................................................................................................................3 1.1 CONTEXTE FONCTIONNEL.......................................................................................................................................3 1.2 CONTEXTE TECHNIQUE..........................................................................................................................................4 2 TRAVAILLER AVEC DES DONNES DE MICROSOFT OFFICE ACCESS 2007......................................5 2.1 DFINIR UNE SOURCE DE DONNES..........................................................................................................................6 2.2 ANALYSER LA SOURCE DE DONNES......................................................................................................................16 2.3 AFFICHER LES DONNES DANS UNE GRILLE.............................................................................................................28 2.4 METTRE JOUR LES DONNES..............................................................................................................................39 3 TRAVAILLER AVEC DES DONNES DE ORACLE.......................................................................................55 3.1 DFINIR LA SOURCE DE DONNES..........................................................................................................................55 3.2 MANIPULER LES DONNES...................................................................................................................................61 4 TRAVAILLER AVEC DES DONNES DE SQL SERVER 2005 EXPRESS EDITION...............................63 4.1 DFINIR LA SOURCE DE DONNES..........................................................................................................................63 4.2 MANIPULER LES DONNES...................................................................................................................................71 5 POUR ALLER PLUS LOIN AVEC SQL SERVER .......................................................................................74 5.1 DFINIR DE NOUVELLES REQUTES UTILISANT DES PROCDURES STOCKES...................................................................74 5.2 AJOUTER UNE REQUTE PARAMTRE UN FORMULAIRE DANS UNE APPLICATION WINDOWS..........................................79 5.3 DVELOPPER AVEC ADO.NET .........................................................................................................................80

Automne 2008

Coach VB.NET

Page 2 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

1 Introduction1.1 Contexte fonctionnelRappel du contexte fonctionnel du tutorial du coach VB Lobjectif du tutorial du Coach VB est daccompagner les dveloppeurs la dcouverte et la prise en main du langage Visual Basic (VB) pour la construction dapplications avec une approche oriente objet. Pour rappel, vous pouvez reprer facilement deux caractristiques importantes du langage laide des logos suivants en marge : Ce logo marque une fonctionnalit de VB ou de Visual Studio qui permet de dvelopper vite (et juste ). Ce logo met en vidence une caractristique de la programmation oriente objet. Contexte fonctionnel du cinquime atelier Dans ce cinquime atelier, lobjectif fonctionnel est rigoureusement le mme que dans latelier prcdent ceci prs que les donnes manipules dans lEditeur ne sont plus extraites dun fichier texte (dextension *.coach) mais dune base de donnes type Microsoft Office Access et Microsoft SQL Server Express Edition. Linterface de lapplication va donc rester rigoureusement identique celle de latelier prcdent moyennant un lger amnagement du menu Fichier de lapplication qui ne comportera plus les options Nouveau et Enregistrer sous puisquelles ne sont plus applicables dans le cas de donnes en bases de donnes :

Combin loption de menu Fichier > Enregistrer, nous rutiliserons loption Toujours demander une confirmation avant denregistrer de la bote dOptions de lapplication pour, si elle est coche, proposer un message de confirmation lutilisateur lui permettant, avant denregistrer dfinitivement ses modifications en base, de les annuler sil le dsire.

Automne 2008

Coach VB.NET

Page 3 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Si lutilisateur clique Annuler, les changements ne seront pas enregistrs dans la base de donnes et la grille sera rinitialise avec les valeurs initiales.

1.2 Contexte techniqueDans cet atelier, lobjectif est bien sr dapprendre se familiariser avec les concepts fondamentaux de laccs aux donnes avec le Framework .NET. A la fin de cet atelier, vous saurez : Ce quest ADO.NET, Ce quest un Fournisseur daccs aux donnes, Configurer une Chane de connexion une source de donnes, Ce quest le Fichier de configuration de lapplication, Manipuler les objets DataSet et TableAdapter dADO.NET pour lire et modifier des donnes.

La solution de cet atelier est disponible dans le rpertoire ..\Atelier 5\Solution sous la forme de trois rpertoires correspondant aux trois grands exercices : - 1 - Access : contient la solution de lexercice 2 : Travailler avec des donnes de Microsoft Office Access. - 2 - SQL Server : contient la solution de lexercice 3 : Travailler avec des donnes de Microsoft SQL Server Express Edition. - 3 - Pour aller plus loin : contient le code de solution de la partie Pour aller plus loin. Les fichiers utiles (dont les fichiers de bases de donnes) auxquels font rfrence les exercices sont disponibles dans le rpertoire ..Atelier 5\Fichiers utiles. Automne 2008 Coach VB.NET Page 4 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

2 Travailler avec des donnes de Microsoft Office Access 2007Dans cet exercice, vous allez apprendre : Dfinir et utiliser une source de donnes avec Visual Studio, Lire des donnes en provenance dune base de donnes, Manipuler des donnes dune base de donnes.

Objectif Lobjectif de ce premier exercice est de dcouvrir les principes lmentaires daccs des donnes stockes dans une base de donnes avec le Framework .NET. Dans cette premire partie, le moteur de base de donnes est Microsoft Office Access 2007. Nous vous proposons de travailler sur le mme jeu de donnes clients que vous avez manipul au travers de fichiers dextension *.coach latelier 4 prcdent :

Mais cette fois-ci, les donnes sont stockes dans une base Microsoft Office Access 2007 plutt que sur un fichier.

Automne 2008

Coach VB.NET

Page 5 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Pour vous permettre de vous concentrer sur lessentiel, un exemple de cette base vous est fourni avec le code de latelier dans le dossier Atelier 5\Fichiers utiles dans le fichier Clients.accdb. Pour pouvoir utiliser cette base de donnes, il vous faut videmment installer le moteur de la base sur votre poste de dveloppement. Si vous navez pas la possibilit dinstaller Microsoft Office Access 2007, nayez pas dinquitude. Il vous suffit de tlcharger et dinstaller les composants de connectivit des donnes fournis gratuitement par Office System. Tlchargez le pilote dOffice System ici : http://www.microsoft.com/downloads/details.aspx? displaylang=fr&FamilyID=7554f536-8c28-4598-9b72-ef94e038c891

2.1 Dfinir une source de donnesDans cet exercice, vous allez apprendre : Dfinir une source de donnes. Utiliser lAssistant Configuration de sources de donnes, Dfinir une chane de connexion, Choisir un fournisseur daccs, Extraire un paramtre dans un fichier de configuration, Utiliser un fichier de donnes.

Droulement de lexercice : 1. Ouvrez le projet prcdent ralis lors de latelier 4 : Lancez Visual Studio partir du menu Dmarrer > Tous les programmes > Microsoft Visual Basic 2008 Express Edition. Menu Fichier > Ouvrir un projet. Automne 2008 Coach VB.NET Page 6 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Retrouvez le fichier Atelier 4.sln que vous avez cr lors de latelier 4 ou, si vous navez pas fait latelier prcdent, rcuprez le projet de solution dans le rpertoire : ..\Atelier 5\Dmarrage\Atelier 5.sln. 2. Crez une source de donnes pointant sur le fichier Access fourni en exemple : Slectionnez le menu Donnes > Ajouter une nouvelle source de donnes dans la barre de menu Standard de Visual Studio.

Une fois de plus, nous allons nous laisser guider par Visual Studio. Son Assistant Configuration de sources de donnes suit lapproche la plus standard et la plus simple pour accder aux donnes avec le Framework .NET. Dans lcran Choisir un type de source de donnes, slectionnez Base de donnes.

Courte explication qui dtaille le type de source de donnes slectionne.

Vous constatez au passage que Visual Studio nous propose de travailler avec dautres sources de donnes quune base, telle quun objet ou un service. Ces deux solutions correspondent des scnarios dapplication plus complexes dans lesquels les donnes ne proviennent pas simplement dune base de donnes locale mais par exemple dautres applications ou de sources htrognes. Dans ce cas, laccs aux donnes fait intervenir des couches de composants ou services supplmentaires qui facilitent linteraction avec les donnes. Automne 2008 Coach VB.NET Page 7 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 La description de la source de donnes indique que loption choisie va donner lieu la cration dun DataSet. Cest quoi un DataSet ? Il sagit dune structure mmoire (donc un objet) trs riche qui permet de travailler avec des donnes de manire indpendante de leur provenance. Nous allons nous servir de cet objet pour stocker en mmoire les donnes que nous allons extraire de la base de donnes Microsoft Access. Il faut savoir quil constitue lun des deux principaux composants dADO.NET. Quest ce que ADO.NET ? Vous voulez vous connecter une source de donnes ? En extraire des donnes puis les manipuler et les rinjecter dans la source de donnes initiale ? Comme dhabitude, il suffit de se reposer sur le Framework .NET qui fournit tous les composants ncessaires la gestion de donnes. Cet ensemble de classes sintitule ADO.NET. Pour avoir une vue densemble dADO.NET : http://msdn.microsoft.com/fr-fr/library/h43ks021.aspx Cliquez Suivant. Dans lcran Choisir votre connexion de donnes, cliquez Nouvelle connexion.

Dans la bote Ajouter une connexion, cliquez sur Modifiez pour slectionner le fournisseur de donnes pour accder une base Access. Coach VB.NET Page 8 sur 80

Automne 2008

Microsoft

Manipuler des donnes en base Atelier 5 Slectionnez Fichier de base de donnes Microsoft Access dans la liste des sources de donnes proposes :

Aidez-vous de la description pour valider le fournisseur dont vous avez besoin.

Quest ce quon entend par fournisseur de donnes ? Aprs le DataSet, le Fournisseur de donnes constitue le deuxime composant essentiel pour la manipulation de donnes dADO.NET. En gros de quoi avons-nous besoin pour discuter avec une base de donnes ? Cest un peu comme si vous commandiez un th glac une terrasse de caf. - Dabord, Il faut tablir ce quon appelle une connexion avec le serveur de base de donnes pour montrer patte blanche. Cela revient interpeller un serveur du caf qui vous identifier comme un client potentiel. - Il faut ensuite pouvoir communiquer et excuter des ordres de traitement sur la base de donnes, cest--dire que vous devez formuler explicitement la commande dun th glac au serveur. - Et enfin, il faut pouvoir stocker le rsultat de vos investigations sur la base de donnes quelque part en mmoire. Typiquement, pour lire des donnes, il vous faut un curseur qui permet de balayer les enregistrements un un. Cest le verre et sa paille Ces trois types de composants, ADO.NET nous les fournit via des fournisseurs de donnes. Par exemple, un objet de type Connection permet dtablir une connexion avec la base, un objet Command dexcuter une requte etc :

Principaux objets dun fournisseur Automne 2008 Coach VB.NET Page 9 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Pourquoi des fournisseurs ? Lequel choisir ? Le souci, cest que vous ne vous connectez pas une base de donnes SQL Server exactement de la mme manire qu une base Access De mme que vous ne commandez pas lune avec les mmes ordres SQL que lautre. En gros pour commander une pizza et vous la faire livrer, vous allez devoir tablir un autre style de communication que pour un simple th glac une terrasse de caf, par exemple par Internet ou par tlphone. Donc les objets que nous allons manipuler ne peuvent pas tre gnriques ! Leur caractristique va dpendre de la base de donnes avec laquelle vous voulez travailler. Cest pour cela que le Framework.Net ne comprend pas un fournisseur de donnes mais plusieurs, qui permettent chacun de sinterfacer avec une source de donnes spcifique. Pour connatre tous les fournisseurs de donnes inclus dans le Framework .NET et pour les comparer : http://msdn.microsoft.com/fr-fr/library/a6cd7c08.aspx Et le DataSet dans tout a ? Par opposition aux objets qui sont fournis par les fournisseurs de donnes, le DataSet est un objet compltement indpendant de toute source de donnes. Donc lui est unique et nest pas inclus dans les fournisseurs de donnes (il est fourni par lespace de noms System.Data). Cest un peu la glacire dans laquelle vous pouvez transporter aussi bien une pizza quun th glac. Peu importe do a vient, les donnes sont l ! Cet objet est extrmement intressant car il permet de fonctionner sur un mode dit dconnect (par opposition connect) de la base de donnes. Aprs tout, vous navez plus besoin du serveur ni de la cuisine pour consommer votre th ou votre pizza. Nous aurons loccasion de revenir sur ce sujet ultrieurement dans cet atelier. Application

Fournisseurs de donnesPour SQL Server Pour OLEDB Pour Oracle

ADO.NET

DataSet

Base de donnes

Automne 2008

Coach VB.NET

Page 10 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Tout a pour dire que la premire chose que Visual Studio vous demande de faire est donc de dterminer le fournisseur daccs le plus adapt votre source de donnes. Il dterminera les objets dont vous disposerez pour programmer laccs celle-ci. Pour Microsoft Office Access, le fournisseur correspondant est Fournisseur de donnes .NET Framework pour OLE DB.

Validez la slection du fournisseur en cliquant OK. De retour dans lcran Ajouter une connexion, cliquez Parcourir droite de la zone de nom de fichier de base de donnes. Slectionnez le fichier de base de donnes Microsoft Office Access 2007 Clients.accdb fourni en exemple dans le dossier ..\Atelier 5\Fichiers utiles :

Cliquez Ouvrir. Avant de valider la connexion tablie, utilisez le bouton Tester la connexion de la bote Ajouter une connexion pour vrifier que Visual Studio est mme dtablir la connexion sur la base de donnes avec les lments que vous lui avez fournis :

Automne 2008

Coach VB.NET

Page 11 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Un message vous informe si la connexion a pu tre tablie ou non. Une fois la connexion vrifie, cliquez sur OK pour quitter la bote Ajouter une connexion. De retour dans lcran Choisir votre connexion de donnes, cliquez le sigle devant Chane de connexion pour afficher le dtail de la connexion que vous venez de configurer :

Chane de connexion la base Microsoft Office Access Clients.accdb.

Quest ce quune chane de connexion ? Cest une chane de texte qui regroupe toutes les informations ncessaires pour ltablissement dune connexion avec la base de Automne 2008 Coach VB.NET Page 12 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 donnes. Chaque information est inscrite sous la forme : Cl = Valeur En somme, pour communiquer avec le moteur de base de donnes dAccess, vous devez spcifier deux cls : - Provider dans laquelle est spcifi le fournisseur de donnes, ici celui pour Access, - Data Source dans laquelle est dfinie la source de donnes proprement dite, ici le fichier de donnes dextension *.accdb. Validez en cliquant Suivant. Visual Studio dtecte que vous utilisez un fichier de donnes et vous suggre de linclure en tant que fichier dans le projet. Cela revient le copier la racine du projet. Le chemin inscrit dans la chane de connexion prcdente est alors aussitt modifi en consquence. Si vous dclinez la proposition, le fichier reste son emplacement initial, un peu comme une base de donnes distante.

Quel est lintrt de copier le fichier dans votre projet ? Il repose sur le comportement de Visual Studio lencontre du fichier au moment de la compilation du projet. En effet, pour vous aider dboguer, Visual Studio se propose de copier le fichier utilis lexcution dans le rpertoire de sortie \bin de lapplication, en plus de la copie prsente dans le rpertoire racine du projet. Jusque l rien de transcendant puisque cela revient placer le fichier au mme endroit que lexcutable du projet. Cest plutt logique. Sauf que lide est que la copie partir du fichier dans le rpertoire racine peut avoir lieu chaque compilation de sortes que le fichier est Automne 2008 Coach VB.NET Page 13 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 systmatiquement rinitialis chaque fois. Du coup, cest super utile pour travailler sur une base propre malgr les nombreux tests quimpose le dbogage du programme chaque excution. Toute modification apporte au fichier de donnes est rinitialise la prochaine excution. Pour en savoir plus sur comment grer des fichiers de donnes locaux dans un projet : http://msdn.microsoft.com/fr-fr/library/ms246989.aspx Rpondez Oui la question dans le contexte de latelier. Dans lcran Enregistrer la chane de connexion dans le fichier de configuration, modifiez le nom de la chane en : AccessClientsConnectionString.

Dans cette tape, Visual Studio vous propose denregistrer la chane de connexion dans le fichier de configuration de lapplication. Cest quoi un fichier de configuration ? Il sagit dun fichier XML dans lequel sont stocks tous les paramtres spcifiques de lapplication. Le runtime lit les informations quil contient au moment de lexcution. Lintrt dexternaliser des informations dans un tel fichier (plutt que de les programmer en dur dans le code du programme) est bien sr den faciliter la maintenance puisquau format texte, ces donnes nont pas besoin dtre recompiles en cas de modification. En externalisant la chane de connexion dans le fichier de configuration de votre application, vous vous simplifiez la vie le jour o une quelconque modification simpose, telle que le changement de nom du Automne 2008 Coach VB.NET Page 14 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 fichier de donnes ou une modification de son emplacement. Cliquez sur Suivant pour accepter lenregistrement de la connexion Dans ltape Choisir vos objets de base de donnes, tendez les diffrents objets en cliquant sur pour voir les objets disponibles dans la source Access.

La source de donnes comporte une seule table de Contacts clients avec les colonnes mentionnes.

Cochez la table Contacts. Toutes les colonnes sont alors automatiquement slectionnes. Modifiez le nom propos par dfaut pour lobjet DataSet par exemple en AccessClientsDataSet.

Automne 2008

Coach VB.NET

Page 15 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 Quest ce que vous venez de faire ? Lobjectif de lAssistant est de prparer un objet de type DataSet qui servira manipuler vos donnes une fois extraite de la base de donnes. En somme, vous venez de dessiner lossature de lobjet mmoire pour quil puisse stocker des enregistrements de type Contacts avec les colonnes spcifies. Cliquez Terminer pour terminer la configuration de la source de donnes.

2.2 Analyser la source de donnesLobjectif de cet exercice est de comprendre ce qui a t construit par lAssistant Configuration de sources de donnes dans lexercice 2.1. Droulement de lexercice : 1. Observez les nouveaux lments ajouts au projet dans lExplorateur de solutions. Commencez par le fichier de donnes Clients.accdb que nous avions demand lAssistant dinclure dans le projet : Slectionnez le fichier de donnes Clients.accdb dans lExplorateur de solutions. Faites un clic droit sur le fichier > Proprits pour afficher la fentre de proprits du fichier.

Notez la proprit Copier dans le rpertoire de sortie.

Cest elle qui contrle le comportement de Visual Studio vis--vis du Automne 2008 Coach VB.NET Page 16 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 fichier de donnes tel que nous lavons voqu lexercice prcdent au moment de la question suivante :

Si le comportement par dfaut ne vous convient pas, il vous suffit de modifier cette proprit en consquence. Pour retrouver la signification des options de cette proprit : http://msdn.microsoft.com/fr-fr/library/ms246989.aspx Cliquez le menu Gnrer > Gnrer Coach.Editeur pour compiler le projet.

Vrifiez que le fichier de donnes est effectivement copi dans le rpertoire \bin\Debug de sortie de lapplication dans lExplorateur Windows :

2. Notez ensuite quun fichier app.config a t ajout au projet : Double cliquez sur le fichier app.config dans lExplorateur de solutions. Automne 2008 Coach VB.NET Page 17 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Il sagit du fichier de configuration de lapplication. Au moment de la compilation le fichier prend le nom de lexcutable suivi de lextension *.config. Basculez dans lExplorateur Windows pour vrifier quun fichier de configuration a t galement ajout dans le rpertoire de sortie de lapplication au moment de la compilation prcdente :

Double cliquez le fichier pour lditer dans Visual Studio. Vous constatez quil sagit rigoureusement du mme contenu que dans app.config vu prcdemment.

Automne 2008

Coach VB.NET

Page 18 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Cest donc dans ce fichier que vous devez retrouver la dfinition de la chane de connexion la source de donnes que vous aviez nomme AccessClientsConnectionString. Reprez la balise qui est prvue pour recevoir la collection de chanes de connexion dfinies dans lapplication. Vrifiez quelle contient la dfinition de la chane de connexion AccessClientsConnectionString :

Vous retrouvez le format de la chane de connexion vu lors de la configuration de la source de donnes avec lAssistant bas sur des couples Cl = Valeur : connectionString="Provider=Microsoft.ACE.OLEDB.12.0; Data Source=|DataDirectory|\Clients.accdb" Avez-vous remarqu que cette chane nest pas tout fait identique celle que vous aviez obtenue au moment de la configuration avec lAssistant savoir :

Lattribut Data Source nest plus tout fait le mme car vous avez dcid dans une tape ultrieure de copier le fichier de donnes dans le dossier du projet. Du coup, Visual Studio a mis automatiquement jour la chane de connexion pour quelle sappuie non plus sur le chemin initial mais sur le dossier de projet. Que signifie |DataDirectory| ? Il sagit dune chane de substitution pour indiquer dynamiquement le chemin du fichier de donnes. Par dfaut il reprsente le rpertoire de lapplication. Automne 2008 Coach VB.NET Page 19 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

A noter que si la chane de connexion doit comporter des informations sensibles telles que des paramtres de scurit, il est possible de la chiffrer pour une meilleure protection de linformation. Pour en savoir plus sur la fonctionnalit de configuration protge applique une chane de connexion : http://msdn.microsoft.com/fr-fr/library/53tyfkaw(VS.80).aspx La chane de connexion, tout comme nimporte quel paramtre que vous souhaitez configurer dans le fichier de configuration de lapplication, est galement ditable de faon plus conviviale quau format XML via le Concepteur de projet de lapplication. Double cliquez My Project dans lExplorateur de solutions pour afficher le Concepteur de projet. Slectionnez longlet Paramtres dans le volet de navigation gauche :

1

2

La chane de connexion est bien l ! Elle est directement modifiable de faon statique depuis cet cran qui est le reflet exact des paramtres personnels que vous pouvez ajouter au fichier de configuration. Nous verrons dans la suite de cet atelier comment utiliser cette mme information par code. 3. Dernier lment gnr par lAssistant et non le moindre : le groupe de donnes (ou DataSet) : Il se matrialise par le fichier AccessClientsDataSet.xsd dans lExplorateur de solutions qui dcrit la structure (schma) du DataSet:

Automne 2008

Coach VB.NET

Page 20 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Double cliquez sur le fichier AccessClientsDataSet.xsd pour afficher le Concepteur de DataSet :

Surface de design du Concepteur de DataSet.

Le Concepteur de DataSet vous donne une reprsentation visuelle et des outils pour manipuler les objets qui constituent le DataSet que vous avez gnr avec lAssistant. En ralit, le groupe de donnes que nous avons gnr correspond videmment du code gnr et ajout au projet. Pour le voir, il suffit de cliquer licne Afficher tous les fichiers lExplorateur de solutions. dans la barre doutils de

Le fichier qui contient le code gnr par le Concepteur (Designer en anglais) de DataSet est le fichier dextension *.Designer.vb.

Automne 2008

Coach VB.NET

Page 21 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Cliquez sur le sigle pour faire apparatre tous les fichiers.

Notez que le contenu de ce fichier est cras chaque fois quune modification est effectue depuis la surface de design du Concepteur. Pour tout savoir sur le Concepteur de DataSet : http://msdn.microsoft.com/fr-fr/library/314t4see.aspx Les deux autres fichiers ont pour extension : - *.xsc : ce fichier stocke vos prfrences utilisateurs au niveau de la configuration de la source de donnes. - *.xss : ce fichier stocke les informations du Concepteur relatives aux objets du DataSet, telles que leur emplacement ou leur taille. Si vous voulez dfinir votre propre code et personnaliser le DataSet, il peut y avoir un troisime fichier dextension *.vb qui contient vos dfinitions dans une classe partielle. (Pour le gnrer, il suffit de faire un clic droit sur la surface du Concepteur de DataSet > Afficher le code). Basculez nouveau sur le Concepteur de DataSet :

Le concepteur affiche deux objets : un objet Contacts et un objet ContactsTableAdapter. A quoi correspondent ces objets ? Automne 2008 Coach VB.NET Page 22 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 Penchons nous (pas trop quand mme pour ne pas tomber) sur la structure dun groupe de donnes (DataSet). Elle est trs proche de celle dune base de donnes relationnelle dans la mesure o un Dataset est constitu dune hirarchie dobjets reprsentant des tables (DataTable), des lignes (DataRow), des colonnes (DataColumn), des contraintes (Constraint) et mme des relations (Relation) :

La seule chose importante comprendre est quon travaille ici en mmoire, et quon manipule des objets. Cest pourquoi il ny aucun lien entre un DataSet et ses sources de donnes physiques. Lobjet Contacts reprsente lune des tables que peut contenir votre DataSet. Dans notre cas, nous navons quune seule table car nous navons slectionn quun seul objet de la base au moment de la configuration de la source de donnes. Avez-vous remarqu que lobjet DataTable sappelle Contacts comme la table dans la base de donnes ? Non seulement il sappelle Contacts, mais en plus il contient une collection de colonnes (dobjets DataColumn) dont les noms sont le reflet des noms de colonnes dans la base de donnes. Pratique non ? En fait, notre DataSet a la particularit dtre typ. Cest quoi un DataSet typ ? Comme son nom lindique, cela veut dire quil est typah ouais ! On est bien avanc avec a Plus srieusement, il est vraiment question de type de donnes. Lide est de vous aider manipuler les donnes le plus simplement possible. En thorie, un DataSet contient une collection de DataTable qui contiennent elles-mmes des collections de lignes (DataRow) et colonnes Automne 2008 Coach VB.NET Page 23 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 (DataColumn). Cela veut dire que pour accder un lment de donnes, il vous faut manipuler des critures du type tabulaire : Tables(indexe).Rows(indexe de la ligne)(indexe de la colonne) et en plus vous rcupreriez une donne dont vous ignorez le type exact car le modle vous retourne une donne de type Object. Lintrt du DataSet typ que nous a gnr lAssistant est quil est plus riche quun DataSet normal dans la mesure o il contient des objets nomms et dont le type reflte rigoureusement les types des donnes en base. Exemple : - pour manipuler la table de notre DataSet, au lieu dutiliser un objet retourn par lcriture Tables(0), on va pouvoir directement travailler avec lobjet DataTable nomm Contacts. - Pour accder une information dans la colonne Nom, on va bnficier dune proprit dobjet appele Nom dont le type est String. Vous lavez compris, le code ne va sen trouver que plus lisible et en plus on va bnficier de laide prcieuse de lIntelliSense et des indications du compilateur en cas derreur de manipulation au moment de la compilation ! Moralit, lAssistant a bien fait les choses Pour en savoir plus sur la diffrence entre un DataSet typ et non typ, rendez-vous sur la rubrique Groupes de donnes typs et non typs de cette page : http://msdn.microsoft.com/fr-fr/library/8bw9ksd6.aspx En rsum, le premier objet Contacts va donc nous servir recueillir en mmoire des donnes de la table Contacts en provenance de la source de donnes. Bon, et le deuxime objet ContactsTableAdapter ? Lobjet TableAdapter est celui qui permet de relier la source de donnes physique lobjet mmoire DataSet. Et oui, car le DataSet est indpendant de la source de donnes. Il ne la connait mme pas ! Cest cet autre objet qui fait tout le travail de communication avec la base, la fois de connexion et la fois de requtage pour extraire ou mettre jour les donnes. Cest un objet qui comprend 4 sous-objets de commande, chargs de commander la base, chacun ddi un type de requte vers la base. Lobjet SelectCommand gre lextraction de donnes tandis que les trois autres objets soccupent des autres types de requtes (Insert, Update et Delete).

Automne 2008

Coach VB.NET

Page 24 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Le DataSet na aucune connexion directe avec la base de donnes physique. Dans le schma ci-dessus, on parle de DataAdapter et non de TableAdapter. Quest ce que cest que cette embrouille encore ? Dit simplement, retenez quun TableAdapter est un objet DataAdapter mais plus riche que lobjet de base. Il est gnr pour nous par lAssistant Configuration de sources de donnes pour nous permettre daller plus loin en matire dinteraction avec la base de donnes. Pour tout savoir sur lobjet TableAdapter : http://msdn.microsoft.com/fr-fr/library/bz9tthwx.aspx Si on faisait le parallle de ce quon voit dans le Concepteur avec les objets tels quils sont dfinis dans le code ? Pour cela, basculez dans le fichier AccessClientsDataSet.Designer.vb. Utilisez les sigles du mode Plan pour rduire les grandes parties du fichier comme suit :

Automne 2008

Coach VB.NET

Page 25 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

-

La classe AccessClientsDataSet reprsente notre DataSet typ pour stocker les donnes dans un objet de type DataTable. Les donnes sont accessibles au travers de la proprit Contacts :

La classe AccessClientsDataSet hrite de la classe DataSet de lespace de noms System.Data du Framework.NET

La classe AccessClientsDataSet contient une proprit Contacts correspondant un objet typ DataTable.

-

ContactsTableAdapter reprsente lobjet TableAdapter pour discuter avec la table Contacts. Cet objet intgre notamment un objet de type Connection sous la forme dune proprit permettant dtablir une connexion sur la base de donnes :

Automne 2008

Coach VB.NET

Page 26 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Si vous faites un clic droit sur le mot InitConnection > Atteindre la dfinition, Visual Studio vous emmne sur la dfinition de la procdure qui rcupre par code la chane de connexion du fichier de configuration de lapplication :

Utilisation de lobjet My qui permet de retrouver la chane de connexion configure dans le Concepteur de projet. Ce qui va nous intresser plus encore, ce sont les mthodes de lobjet qui vont nous permettre de travailler sur les donnes dans la suite de latelier, telles que Fill, Update, Insert et Delete :

La mthode Fill par exemple, est celle quil va nous falloir utiliser pour extraire les donnes de la base de donnes et les charger dans lobjet Automne 2008 Coach VB.NET Page 27 sur 80

Microsoft DataSet.

Manipuler des donnes en base Atelier 5

Comment la mthode Fill fait-elle pour interroger la base de donnes ? Elle sappuie sur lobjet SelectCommand contenu dans le TableAdapter qui dfinit la requte SELECT excuter sur le moteur de base de donnes. Pour voir les quatre objets de commande et le dtail des requtes gnres de lobjet ContactsTableAdapter, slectionnez lobjet dans le Concepteur de DataSet puis tapez la touche F4 pour faire apparatre la fentre de proprits :

Chane de connexion Requte Delete Requte Insert

Requte Select Objet de type TableAdapter Requte Update

Voil ! Maintenant nous avons tout ce quil nous faut pour accder notre base de donnes Access. Comment a, vous trouvez a bien compliqu ? En ralit il va nous falloir en tout et pour tout 3 malheureuses lignes de code pour extraire les donnes et les afficher dans la grillesi si, vridique ! Il nen faudra pas plus pas moins pour mettre jour la base de donnes avec les modifications effectues par lutilisateur partir de lditeur

2.3 Afficher les donnes dans une grilleLobjectif de cet exercice est dextraire les donnes de la base de donnes puis de les afficher dans la grille de donnes de lditeur. Dans cet exercice, vous allez apprendre : Utiliser des objets DataSet et TableAdapter, Utiliser la mthode Fill dun TableAdapter pour extraire des donnes dans une source Coach VB.NET Page 28 sur 80

Automne 2008

Microsoft de donnes.

Manipuler des donnes en base Atelier 5

Contexte fonctionnel Lobjectif tant dafficher des donnes en provenance dune base de donnes, nous allons donc supprimer le menu Fichier > Nouveau de lapplication qui na plus vraiment de sens.

En cliquant le menu Fichier > Ouvrir, lutilisateur doit voir safficher tous les enregistrements de la base dans la grille de donnes comme suit :

Droulement de lexercice : 1. Supprimez loption de menu Fichier > Nouveau dans le formulaire Main : Ouvrez le formulaire Main en mode Design. Faites un clic droit sur loption Nouveau du menu Fichier puis slectionnez Supprimer pour dtruire loption :

Automne 2008

Coach VB.NET

Page 29 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Basculez dans le code du fichier en faisant un clic droit sur la surface du Concepteur de formulaire > Afficher le code. Reprez le gestionnaire dvnement NouveauToolStripMenuItem_Click dans la classe Main. Pensez utiliser la fonction de recherche de Visual Studio pour retrouver un mot dans le code du projet. Tapez les touches CTRL + F pour faire apparatre la fentre de recherche :

Slectionnez lintgralit de la NouveauToolStripMenuItem_Click et supprimez-la :

procdure

Automne 2008

Coach VB.NET

Page 30 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

2. Testez la suppression de loption de menu : Compilez le projet pour vrifier que la gnration se droule sans souci. Excutez lapplication (CTRL F5) pour vrifier que loption Fichier > Nouveau nexiste plus.

Fermez lapplication.

3. Modifiez maintenant le code de loption Fichier > Ouvrir pour quil extrait les donnes non plus dun fichier texte mais de la base de donnes Microsoft Office Access, pour les afficher dans la grille MainDataGridView du formulaire : Reprez le gestionnaire dvnement OuvrirToolStripMenuItem_Click dans la classe Main.

Automne 2008

Coach VB.NET

Page 31 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Supprimez les trois premires lignes du code qui configurent la bote de dialogue douverture de fichier de Windows. Supprimez galement la structure de boucle IfThenEnd If qui entoure le code de lecture puis le chargement des donnes. Supprimez enfin les deux lignes de cration puis de chargement de la table mmoire newDataTable de type DataTable que nous allons remplacer par le code dextraction des donnes de la base Access. Les deux dernires lignes de code de la procdure visant mmoriser le chemin du fichier et mettre jour le titre de la fentre en correspondance ne sont plus non plus dactualit. Cela donne :

Code VB Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OuvrirToolStripMenuItem.Click 'Slection du fichier l'aide de la bote de dialogue d'ouverture standard Dim openDataFileDialog As OpenFileDialog = New OpenFileDialog() openDataFileDialog.Filter = "Fichiers coach|*.coach" openDataFileDialog.InitialDirectory = SaveDirectoryPath If openDataFileDialog.ShowDialog = Windows.Forms.DialogResult.OK Then 'Code d'ouverture du fichier slectionn Dim newDataTable As DataTable newDataTable = ReadFile(openDataFileDialog.FileName) 'Configuration du gestionnaire de liaison sur la source de donnes MainBindingSource.DataSource = newDataTable 'Liaison du gestionnaire avec les contrles d'affichage de donnes MainDataGridView.DataSource = MainBindingSource MainBindingNavigator.BindingSource = MainBindingSource 'Mmorisation du chemin du fichier pour une ventuelle sauvegarde DataFilePath = openDataFileDialog.FileName 'Affichage du nom du fichier dans la barre de titre du formulaire UpdateFormTitle(DataFilePath) End If Automne 2008 Coach VB.NET Page 32 sur 80

Microsoft End Sub

Manipuler des donnes en base Atelier 5

Il ne doit rester que le code de liaison de la structure de donnes mmoire avec la grille et le gestionnaire de liaison du formulaire. Vous devez donc obtenir :

Code VB Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OuvrirToolStripMenuItem.Click Lecture des donnes dans la base de donnes emplacement du code dextraction Futur des donnes de la base 'Configuration du gestionnaire de liaison sur la source de donnes MainBindingSource.DataSource = newDataTable 'Liaison du gestionnaire avec les contrles d'affichage de donnes MainDataGridView.DataSource = MainBindingSource MainBindingNavigator.BindingSource = MainBindingSource End Sub Code de liaison des donnes mmoire avec les contrles daffichage quil faut conserver. De quoi avons-nous besoin ? Sur la base de ce que nous avons vu lexercice prcdent, il nous faut : - Lobjet ContactsTableAdapter pour envoyer lordre dextraction des donnes la base de donnes. - Lobjet Contacts pour stocker les donnes en mmoire en retour de lextraction. Ensuite, il ne nous restera qu charger les contrles daffichage en sappuyant sur le mcanisme de liaison de donnes (databinding) que nous avons vu latelier prcdent. Et oui, on retombe exactement sur le mme fonctionnement puisque lobjet Contacts dans lequel nous allons charger les donnes est aussi un objet de type DataTable au mme titre que lobjet newDataTable que nous avions utilis pour lire les donnes du fichier texte. Dclarez une variable nomme ClientsDataSet de type AccessClientsDataSet juste aprs la ligne de dfinition de la classe Main comme suit :

Code VB Public Class Main Dim ClientsDataSet As AccessClientsDataSet Do sort le type de donnes AccessClientsDataSet ? Cest le nom de la classe gnre par lAssistant Configuration de source Automne 2008 Coach VB.NET Page 33 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 de donnes que nous avons observe dans le AccessClientsDataSet.Designer.vb lexercice prcdent. fichier

Pourquoi dfinir lobjet DataSet au niveau de la classe ? Tout simplement parce quil doit perdurer sur toute la dure de vie du programme. Noubliez pas quil va hberger les donnes extraites de la base et que ces donnes ont pour vocation dtre manipules au travers de linterface. Attention ! Cela ne veut pas dire que la connexion la base de donnes elle aussi perdure sur toute la dure de vie de lapplication. Rappelezvous que cest lobjet TableAdapter qui a en charge de grer la connexion pour discuter avec la base. Une fois les donnes rapatries ou les ordres de mise jour excuts, la connexion est immdiatement relche ! Cest pour cela quon parle de mode dconnect. Pendant ce temps le DataSet peut mener sa petite vie tranquille sans se proccuper de rien Reprez le constructeur de la classe Main nomm New :

Ajoutez la fin du constructeur lordre de cration de lobjet ClientsDataSet en invoquant le constructeur de la classe AccessClientsDataSet :

Code VB Public Class Main Public Sub New() ' Cet appel est requis par le Concepteur Windows Form. InitializeComponent() ' Ajoutez une initialisation quelconque aprs l'appel InitializeComponent(). mainNotifyIcon.Icon = My.Resources.lan_connected 'Instanciation du DataSet qui va servir travailler sur les donnes ClientsDataSet = New AccessClientsDataSet() End Sub Revenons sur le code de la OuvrirToolStripMenuItem_Click. Dclarez un objet nomm ClientsTableAdapter ContactsTableAdapter : Coach VB.NET procdure de type

Automne 2008

Page 34 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Code VB Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OuvrirToolStripMenuItem.Click 'Lecture des donnes dans la base de donnes Dim ClientsTableAdapter = new _ AccessClientsDataSetTableAdapters.ContactsTableAdapter() 'Configuration du gestionnaire de liaison sur la source de donnes MainBindingSource.DataSource = newDataTable 'Liaison du gestionnaire avec les contrles d'affichage de donnes MainDataGridView.DataSource = MainBindingSource MainBindingNavigator.BindingSource = MainBindingSource End Sub Pourquoi prcdez le nom de la classe ContactsTableAdapter du nom AccessClientsDataSetTableAdapters ? AccessClientsDataSetTableAdapters est lespace de noms dans lequel a t gnr la classe ContactsTableAdapter. Vous pouvez retrouver sa dfinition en faisant un clic droit sur le nom > Atteindre la dfinition.

La classe du DataSet nest pas dans le mme espace de noms.

Cet espace de noms na dautre objectif que de sparer lobjet TableAdapter des autres objets du groupe de donnes. La classe DataSet est elle-mme place dans lespace de noms racine du projet. Utilisez la mthode Fill de lobjet ClientsTableAdapter pour remplir la table Contacts de lobjet ClientsDataSet avec les donnes en provenance de la base : Coach VB.NET Page 35 sur 80

Automne 2008

Microsoft

Manipuler des donnes en base Atelier 5

Code VB Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OuvrirToolStripMenuItem.Click 'Lecture des donnes dans la base de donnes Dim ClientsTableAdapter = new _ AccessClientsDataSetTableAdapters.ContactsTableAdapter() 'Extraction des donnes et chargement du DataSet ClientsTableAdapter.Fill(ClientsDataSet.Contacts) 'Configuration du gestionnaire de liaison sur la source de donnes MainBindingSource.DataSource = newDataTable 'Liaison du gestionnaire avec les contrles d'affichage de donnes MainDataGridView.DataSource = MainBindingSource MainBindingNavigator.BindingSource = MainBindingSource End Sub Noubliez pas quun DataSet en lui-mme ne contient pas de donnes directement. Les donnes sont en fait charges dans la collection de DataTable quil contient. Dans notre cas, le DataSet ne contient quune seule table (Contacts) et comme il est typ nous pouvons accder directement lobjet DataTable via lcriture ClientsDataSet.Contacts. Pratique non ? Peut-tre vous attendiez-vous une criture du type : DataTable en retour = TableAdapter.Fill() ? Pourquoi pas mais il se trouve que la mthode Fill attend le conteneur de donnes en paramtre de la procdure. Le paramtre est pass par rfrence cest--dire que les modifications effectues dans le traitement de la procdure sont directement appliques lobjet initial pass en paramtre. Que fait la mthode Fill concrtement ? La mthode Fill rcupre des lignes de la source de donnes l'aide de l'instruction SELECT dfinie dans lobjet SelectCommand. Pourquoi est-ce quil ne faut pas ouvrir une connexion sur la base de donnes avant dappeler la mthode Fill ? Tout simplement, vous vous en doutez, parce que cest la mthode qui soccupe de tout . Si une connexion est dj ouverte avant lappel la mthode Fill, elle est utilise. Sinon, elle est automatiquement ouverte le temps de rcuprer les donnes. La connexion est aussitt ferme une fois les donnes rapatries dans le DataSet. Si la connexion tait ouverte au pralable, elle reste ouverte. Par dfaut un TableAdapter comprend deux mthodes pour extraire les donnes d'une base de donnes afin de les insrer dans un DataTable : - La mthode Fill, qui utilise un DataTable existant comme paramtre et le remplit. Coach VB.NET Automne 2008

Page 36 sur 80

Microsoft -

Manipuler des donnes en base Atelier 5 La mthode GetData qui renvoie un nouveau DataTable dj rempli. Dans notre cas, cest bien la mthode Fill la plus approprie puisque notre DataSet typ contient un objet DataTable tout prt pour rceptionner les donnes. Pour tout savoir sur la mthode Fill : http://msdn.microsoft.com/fr-fr/library/377a8x4t(VS.80).aspx Pour en savoir plus sur comment remplir de donnes un groupe de donnes http://msdn.microsoft.com/fr-fr/library/ms171920(VS.80).aspx Que nous reste-il faire ? Il ne reste qu afficher les donnes dans les contrles daffichage en utilisant le mcanisme de liaison de donnes (databinding). Les contrles daffichage doivent tre lis une source de donnes telle quun objet DataTable. Et bien on la cet objet ! Cest ClientsDataSet.Contacts que vous venez de remplir laide du TableAdapter. Corrigez le databinding de la grille de donnes pour quelle soit lie la table ClientsDataSet.Contacts au lieu de lobjet newDataTable initial :

Code VB Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OuvrirToolStripMenuItem.Click 'Lecture des donnes dans la base de donnes Dim ClientsTableAdapter = new _ AccessClientsDataSetTableAdapters.ContactsTableAdapter() 'Extraction des donnes et chargement du DataSet ClientsTableAdapter.Fill(ClientsDataSet.Contacts) 'Configuration du gestionnaire de liaison sur la source de donnes MainBindingSource.DataSource = newDataTable ClientsDataSet.Contacts 'Liaison du gestionnaire avec les contrles d'affichage de donnes MainDataGridView.DataSource = MainBindingSource MainBindingNavigator.BindingSource = MainBindingSource End Sub 4. Testez le chargement des donnes dans lEditeur : Excutez lapplication en cliquant sur (ou touche F5). Cliquez le menu Fichier > Ouvrir.

Automne 2008

Coach VB.NET

Page 37 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Vrifiez que le gestionnaire de liaison fonctionne correctement en utilisant les flches et /ou la zone de texte de positionnement.

Alors ? Je ne vous avais pas dit que le code tenait en trois lignes ? Un jeu denfant En fait, il y a encore plus court en utilisant le menu Donnes > Afficher la source de donnes de Visual Studio. Il suffit de faire glisser les lments (par exemple la table Contacts) de la fentre sur la surface de design dun formulaire et automatiquement la grille est gnre avec tous les objets associs.

Automne 2008

Coach VB.NET

Page 38 sur 80

Grille de donnes

Microsoft

Manipuler des donnes en base Atelier 5

Barre de dfilement

Pour en savoir plus sur la fentre Source de donnes : http://msdn.microsoft.com/fr-fr/library/6ckyxa83(VS.80).aspx

2.4 Mettre jour les donnesLobjectif de cet exercice est de mettre jour la base de donnes avec les modifications apportes aux donnes par lutilisateur dans linterface. Dans cet exercice, vous allez apprendre : Utiliser la mthode Update dun DataAdapter pour reporter des modifications de donnes dans une source de donnes, Utiliser la mthode RejectChanges dun DataSet pour annuler des modifications faites avec les contrles daffichage, Utiliser une boucle de dcision TryCatchEnd Try.

Contexte fonctionnel Loption de menu Fichier > Enregistrer sous ntant plus applicable, nous allons donc la supprimer son tour.

Automne 2008

Coach VB.NET

Page 39 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

La sauvegarde des modifications est effectue lorsque lutilisateur slectionne le menu Fichier > Enregistrer. Nous allons utiliser loption Toujours demander une confirmation avant denregistrer de la bote dOptions de lapplication pour, si elle est coche, proposer un message de confirmation lutilisateur lui permettant dannuler ses modifications en cas de besoin.

Si lutilisateur clique Annuler, les changements ne sont pas enregistrs dans la base de donnes et la grille est rinitialise avec les valeurs initiales.

Droulement de lexercice : 1. Supprimez loption de menu Fichier > Enregistrer sous dans le formulaire Main: Ouvrez le formulaire Main en mode Design. Faites un clic droit sur loption Enregistrer sous du menu Fichier puis slectionnez Supprimer pour dtruire loption :

Automne 2008

Coach VB.NET

Page 40 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Basculez dans le code du fichier en faisant un clic droit sur la surface du Concepteur de formulaire > Afficher le code. Reprez le gestionnaire dvnement EnregistrersousToolStripMenuItem_Click dans la classe Main. Slectionnez lintgralit de la procdure EnregistrersousToolStripMenuItem_Click et supprimez-la :

Automne 2008

Coach VB.NET

Page 41 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 Reprez le gestionnaire dvnement EnregistrerToolStripMenuItem_Click dans la classe Main qui correspond au clic sur le menu Fichier > Enregistrer. Supprimez le contenu de la procdure que nous allons remplacer par le code de mise--jour des donnes dans la base de donnes Access :

Code VB Private Sub EnregistrerToolStripMenuItem_Click() _ Handles EnregistrerToolStripMenuItem.Click 'Mise--jour des donnes dans la base de donnes End Sub 2. Testez la suppression de loption de menu : Compilez le projet pour vrifier que la gnration se droule sans souci. Excutez lapplication (CTRL F5) pour vrifier que loption Fichier > Enregistrer sous nexiste plus.

Vous obtenez :

Fermez lapplication.

Automne 2008

Coach VB.NET

Page 42 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 Que va-t-il falloir faire pour enregistrer les donnes ? Est-ce que vous vous souvenez comment fonctionne la grille de donnes ? Nous avons vu latelier 4 prcdent que la grille de donnes est capable denregistrer les modifications effectues par lutilisateur automatiquement dans sa source de donnes (DataTable). Cest le principe de la liaison de donnes (ou databinding) que lon dit bidirectionnel puisque cela marche aussi bien dans un sens que dans lautre. Donc, cest dans lobjet DataTable qui constitue la source de donnes de la grille quil faut rcuprer les changements pour les appliquer la base de donnes. Et pour discuter avec la base il nous faut ? Lobjet de type TableAdapter qui propose une mthode nomme Update pour rpercuter les changements dans la base de donnes. Alors allons-y !

3. Coder la mise--jour des changements oprs par lutilisateur dans la grille de donnes dans la base Access : Au dbut de la procdure EnregistrerToolStripMenuItem_Click, dclarez un objet de type ContactsTableAdapter comme suit : Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click 'Mise--jour des donnes dans la base de donnes Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() End Sub Demandez au gestionnaire de source de donnes MainBindingSource dappliquer toutes les modifications en attente dans la grille daffichage dans la source de donnes (DataTable). Pour cela utilisez la mthode EndEdit du gestionnaire :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click 'Mise--jour des donnes dans la base de donnes Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() 'Appliquer les changements des contrles d'affichage 'dans la source de donnes sous-jacente MainBindingSource.EndEdit() End Sub Pour tout savoir sur la mthode EndEdit de lobjet BindingSource : http://msdn.microsoft.com/frAutomne 2008 Coach VB.NET Page 43 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 fr/library/system.windows.forms.bindingsource.endedit(VS.85).aspx Vrifiez que des changements se sont produits en utilisant la proprit HasChanges de la source de donnes ClientsDataSet :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click 'Mise--jour des donnes dans la base de donnes Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() 'Appliquer les changements des contrles d'affichage 'dans la source de donnes sous-jacente MainBindingSource.EndEdit() 'Vrifiez que des modifications ont eu lieu If ClientsDataSet.HasChanges Then End If End Sub Utilisez la mthode Update de lobjet ContactsTableAdapter pour mettre jour les changements dans la base de donnes :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click 'Mise--jour des donnes dans la base de donnes Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() 'Appliquer les changements des contrles d'affichage 'dans la source de donnes sous-jacente MainBindingSource.EndEdit() 'Vrifiez que des modifications ont eu lieu If ClientsDataSet.HasChanges Then 'Appliquer les changements dans la base de donnes ClientsTableAdapter.Update(ClientsDataSet.Contacts) End If End Sub Que fait la mthode Update concrtement ? Elle analyse chaque modification apporte dans la source de donnes passe en paramtre et excute la commande approprie pour propager la ligne modifie la base de donnes : - sil sagit dune nouvelle ligne, elle excute la commande INSERT, - sil sagit dune suppression de ligne, elle excute la commande DELETE, - et sil sagit dune ligne ayant subi une modification, elle excute la commande UDPATE.

Automne 2008

Coach VB.NET

Page 44 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 Pour tout savoir sur la mthode Update: http://msdn.microsoft.com/fr-fr/library/33y2221y(VS.80).aspx ou encore ce lien : http://msdn.microsoft.com/frfr/library/system.data.common.dataadapter.update.aspx

4. Testez le fonctionnement de la mise jour : Excutez lapplication en cliquant sur (ou touche F5). Cliquez le menu Fichier > Ouvrir pour charger les donnes de la base Access dans la grille daffichage.

Modifiez le contenu dune ligne existante. Par exemple, changez ladresse du premier contact.

Insrez une nouvelle ligne en cliquant lditeur.

dans la barre de navigation de

Automne 2008

Coach VB.NET

Page 45 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Entrez les donnes de la ligne colonne par colonne.

Supprimez une ligne en cliquant

.

Cliquez le menu Fichier > Enregistrer. Cliquez le menu Fichier > Ouvrir pour recharger les donnes en provenance de la base de donnes. Vrifiez que vos changements ont t retenus.

Automne 2008

Coach VB.NET

Page 46 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 Pour tre sr, vous pouvez fermer et rouvrir lapplication mais faites attention de ne pas la recompiler sinon pour rappel, Visual Studio rinitialise le fichier de donnes dans le rpertoire de sortie partir de la copie dans le rpertoire racine du projet ! La mise jour de donnes est plus dlicate que lextraction dans le sens o des erreurs peuvent se produire, voire des conflits. Pour viter que des messages intempestifs apparaissent lutilisateur, il faut grer les erreurs potentielles dans le code. Pour cela, on utiliser une structure de dcision TryCatchEnd Try : - Le principe consiste prcder le bloc dinstructions dans lequel une erreur peut se produire de linstruction Try. - Ensuite on peut ajouter autant de bloc Catch que de type dexception gnre par le systme, condition que vous sachiez les anticiper. Si vous ne savez pas lavance le type derreur possible, alors un seul bloc Catch fera laffaire. Cest quoi une Exception ? Lorsquune erreur se produit, le Framework .NET gnre une sorte dalerte pour prvenir lapplication quun problme est survenu pendant lexcution. Cette erreur peut tre analyse dans le code laide dun objet qui dtaille prcisment le problme (source de lerreur, message de lerreur etc) quon appelle Exception. Dautres classes drives de la classe de base caractrisent des types dexception particuliers (System.OverflowException, System.IO.FileNotFoundException etc) Pour en savoir plus sur la classe Exception : http://msdn.microsoft.com/fr-fr/library/system.exception(VS.80).aspx Pour savoir comment intercepter une exception dans Visual Basic : http://msdn.microsoft.com/fr-fr/library/ys1b32h3(VS.80).aspx

5. Encadrez le code de mise jour dans un bloc TryCatch : Ajoutez linstruction TryEnd Try au dbut et la fin de la procdure comme suit : Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() Try 'Mise--jour des donnes dans la base de donnes 'Appliquer les changements des contrles MainBindingSource.EndEdit() 'Vrifiez que des modifications ont eu lieu If ClientsDataSet.HasChanges Then 'Appliquer les changements dans la base de donnes ClientsTableAdapter.Update(ClientsDataSet.Contacts) End If End Try Automne 2008 Coach VB.NET Page 47 sur 80

Microsoft End Sub

Manipuler des donnes en base Atelier 5

Un bon rflexe est de laisser les dclarations de variable (par exemple ici celle de lobjet TableAdapter) lextrieur du bloc Try car tout ce que vous dclarez dans un bloc Try nest accessible qu lintrieur du bloc. Ajoutez un bloc Catch comme suit :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() Try 'Mise--jour des donnes dans la base de donnes 'Appliquer les changements des contrles MainBindingSource.EndEdit() 'Vrifiez que des modifications ont eu lieu If ClientsDataSet.HasChanges Then 'Appliquer les changements dans la base de donnes ClientsTableAdapter.Update(ClientsDataSet.Contacts) End If Catch ex As Exception End Try End Sub Logiquement il faudrait maintenant rechercher la (ou les) ligne(s) du DataTable qui a (ont) provoqu lerreur. Nous allons nous contenter ici dafficher un message lutilisateur. Pour savoir comment trouver les lignes dun DataSet contenant des erreurs : http://msdn.microsoft.com/fr-fr/library/bb747e9b(VS.80).aspx Ajoutez un message lattention de lutilisateur en utilisant la mthode Show de la classe MessageBox du Framework .NET et lobjet ex de type Exception qui dtaille lerreur :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() Try Catch ex As Exception MessageBox.Show( _ "Une erreur est survenue au moment de la mise jour", _ "Erreur de mise--jour") Automne 2008 Coach VB.NET Page 48 sur 80

Microsoft End Try End Sub

Manipuler des donnes en base Atelier 5

Pour tout savoir sur la structure de dcision TryCatchEnd Try : http://msdn.microsoft.com/fr-fr/library/ms172857.aspx Pour tout savoir sur la mthode Show de la classe MessageBox : http://msdn.microsoft.com/frfr/library/system.windows.messagebox.show(VS.85).aspx 6. Reste implmenter la confirmation des changements en sappuyant sur loption configure par lutilisateur dans la bote Options : Pour rappel, nous avions sauvegard ltat de la case cocher Toujours demander une confirmation avant denregistrer de la bote Options dans la variable prive ConfirmBeforeSave de type Boolean de la classe Main.

La sauvegarde de la dite variable est code dans la mthode SaveOptions de la classe Main :

Automne 2008

Coach VB.NET

Page 49 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Lalgorithme de confirmation est le suivant : Si loption de confirmation de la bote Options est coche, il faut donc demander une confirmation lutilisateur en utilisant par exemple la mthode Show de la classe MessageBox. Si lutilisateur valide lenregistrement, le code que nous venons dcrire pour envoyer les changements dans la base sapplique. Sinon il faut annuler les changements. Comment fait-on pour annuler les changements oprs par lutilisateur dans la grille ? Cette opration est possible grce la richesse de lobjet mmoire DataSet dans lequel sont stockes les donnes. En effet, chaque ligne dune DataTable est un objet DataRow qui possde un statut indiquant ltat de la ligne (proprit RowState). Chaque ligne mmorise galement les valeurs initiales des donnes avant modification ainsi que les nouvelles valeurs aprs modification. Valeurs possibles de la proprit RowState dun objet DataRow :

Valeurs de lnumration DataRowState Pour en savoir plus sur la proprit DataRow.RowState : http://msdn.microsoft.com/frfr/library/system.data.datarow.rowstate(VS.80).aspx Du coup, pour valider ou annuler tous les changements dun groupe de donnes, le Framework.NET nous fournit deux mthodes, respectivement AcceptChanges et RejectChanges. Ces mthodes peuvent sappliquer sur le DataSet entier (sil contient plusieurs tables) ou sur une table Automne 2008 Coach VB.NET Page 50 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 DataTable particulire, ou mme sur une ligne DataRow. Pour en savoir plus sur la mthode RejectChanges : http://msdn.microsoft.com/frfr/library/system.data.datatable.rejectchanges(VS.80).aspx Idem sur la mthode AcceptChanges : http://msdn.microsoft.com/frfr/library/system.data.dataset.acceptchanges.aspx Notez que la mthode AcceptChanges est appele automatiquement la fin du processus de traitement de la mthode Update du TableAdapter pour marquer toutes les lignes ltat Unchanged. Editez la procdure EnregistrerToolStripMenuItem_Click. Ajoutez une structure de dcision pour valider ltat de la variable ConfirmBeforeSave attestant de la volont de lutilisateur de bnficier dune confirmation avant enregistrement :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() Try 'Mise--jour des donnes dans la base de donnes 'Appliquer les changements des contrles MainBindingSource.EndEdit() 'Vrifiez que des modifications ont eu lieu If ClientsDataSet.HasChanges Then 'Vrifiez si l'option de confirmation est coche dans la bote Options If ConfirmBeforeSave Then 'Appliquer les changements dans la base de donnes ClientsTableAdapter.Update(ClientsDataSet.Contacts) End If End If Catch ex As Exception MessageBox.Show( _ "Une erreur est survenue au moment de la mise jour", _ "Erreur de mise--jour") End Try End Sub Si le rsultat du test est vrai, demandez confirmation lutilisateur avec la mthode Show de la classe MessageBox avant denregistrer les changements :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click Automne 2008 Coach VB.NET Page 51 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 'Vrifiez si l'option de confirmation est coche dans la bote Options If ConfirmBeforeSave Then If MessageBox.Show("Etes vous sr de vouloir enregistrer les changements ?", _ "Confirmation de l'enregistrement", _ MessageBoxButtons.OKCancel, _ MessageBoxIcon.Question) _ = Windows.Forms.DialogResult.OK Then 'Appliquer les changements dans la base de donnes ClientsTableAdapter.Update(ClientsDataSet.Contacts) End If End If

End Sub Sinon, annulez les changements avec la mthode RejectChanges de lobjet ClientsDataSet :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click 'Vrifiez si l'option de confirmation est coche dans la bote Options If ConfirmBeforeSave Then If MessageBox.Show("Etes vous sr de vouloir enregistrer les changements ?", _ "Confirmation de l'enregistrement", _ MessageBoxButtons.OKCancel, _ MessageBoxIcon.Question) _ = Windows.Forms.DialogResult.OK Then 'Appliquer les changements dans la base de donnes ClientsTableAdapter.Update(ClientsDataSet.Contacts) Else ClientsDataSet.RejectChanges() End If End If End Sub Attention ! Il ne faut pas oublier de raliser lenregistrement mme si loption de confirmation na pas t coche par lutilisateur. Rajoutez une instruction Else sur le test de la valeur de ConfirmBeforeSave pour enregistrer les modifications dans la source de donnes sans aucune confirmation pour lutilisateur :

Code VB Private Sub EnregistrerToolStripMenuItem_Click( ) _ Handles EnregistrerToolStripMenuItem.Click Automne 2008 Coach VB.NET Page 52 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

'Vrifiez si l'option de confirmation est coche dans la bote Options If ConfirmBeforeSave Then If MessageBox.Show("Etes vous sr de vouloir enregistrer les changements ?", _ "Confirmation de l'enregistrement", _ MessageBoxButtons.OKCancel, _ MessageBoxIcon.Question) _ = Windows.Forms.DialogResult.OK Then 'Appliquer les changements dans la base de donnes ClientsTableAdapter.Update(ClientsDataSet.Contacts) Else ClientsDataSet.RejectChanges() End If Else 'Appliquer les changements sans confirmation ClientsTableAdapter.Update(ClientsDataSet.Contacts) End If End Sub 7. Testez la mise en place de la confirmation : Excutez lapplication en cliquant sur (ou touche F5). Cliquez le menu Fichier > Ouvrir pour charger les donnes de la base Access dans la grille daffichage. Cliquez le menu Outils > Options et cochez la case Toujours demander une confirmation avant denregistrer :

Validez par OK. Supprimez par exemple une ligne de donnes au hasard dans la grille en utilisant licne .

Automne 2008

Coach VB.NET

Page 53 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Suppression de la ligne prcdente

Cliquez le menu Fichier > Enregistrer. Rpondez par Annuler la question qui saffiche :

La grille revient aussitt son tat initial refltant la rinitialisation du DataSet. Merci le databinding

La ligne manquante rapparat aussitt.

Pour tout savoir sur Comment mettre jour des modifications apportes un groupe de donnes dans une base de donnes : http://msdn.microsoft.com/fr-fr/library/xzb1zw3x(VS.80).aspx Automne 2008 Coach VB.NET Page 54 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

3 Travailler avec des donnes de OracleEt si vous envisagiez de mettre les mmes donnes que dans lexercice prcdent mais cette fois dans Oracle ? Lobjectif de cet exercice est de vous montrer que ce nest pas plus ou moins compliqu quavec Access.

3.1 Dfinir la source de donnesLa procdure que nous avons suivie lexercice prcdent sapplique aussi bien une base de donnes Access qu une base de donnes Oracle ou SQL Server. La premire tape consiste donc dfinir une source de donnes pour gnrer un groupe de donnes typ reprenant la structure des objets qui nous intressent dans notre base Oracle. Contexte fonctionnel La base de donnes qui vous est fournie titre dexemple a une structure similaire la base Access de lexercice prcdent. Elle est constitue dune seule table nomme Contacts. Cette table a t cre dans le schma COACHVB de la base DL01 du serveur DEVEXPLOIT. Vous trouverez aussi le script pour crer et alimenter cette table de donnes Contacts Oracle.sql dans le rpertoire Atelier 5\Fichiers utiles. Droulement de lexercice : 1. Crer une nouvelle source de donnes pointant sur le fichier Clients.mdf : Toujours sur la base du projet prcdent ouvert dans Visual Studio, slectionnez le menu Donnes > Afficher les sources de donnes pour afficher la fentre Sources de donnes :

Dans la fentre Sources de donnes, cliquez licne pour ajouter une nouvelle source de donnes au projet (en plus de celle que nous avons dfini pour Access) :

Dans lcran Choisir un type de source de donnes, slectionnez Base de donnes.

Automne 2008

Coach VB.NET

Page 55 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Cliquez Suivant. Dans lcran Choisir votre connexion de donnes, cliquez Nouvelle connexion.

Vous devez voir dans la liste la connexion que vous avez construite lexercice prcdent pointant sur la base Access.

Dans la bote Ajouter une connexion, cliquez sur Modifier pour slectionner le fournisseur de donnes pour accder cette fois-ci une base SQL Server. Slectionnez Fichier de base de donnes Oracle dans la liste des sources de donnes propose :

Automne 2008

Coach VB.NET

Page 56 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 Il faut savoir que le fournisseur de donnes pour Oracle fourni dans le Framework.NET est optimis de faon accder directement Oracle, sans ajout dune couche OLEDB ou ODBC comme cest le cas pour le fournisseur que nous avons utilis lexercice prcdent pour accder la base Access : Validez la slection du fournisseur en cliquant OK. De retour dans lcran Ajouter une connexion, indiquez le nom du service rseau (Configur par le biais de l'utilitaire Net Manager d'Oracle), le nom de l'utilisateur et son mot de passe.

Avant de valider la connexion tablie, utilisez le bouton Tester la connexion de la bote Ajouter une connexion pour vrifier que Visual Studio est mme dtablir la connexion sur la base de donnes avec les lments que vous lui avez fournis : Un message vous informe si la connexion a pu tre tablie ou non.

Une fois la connexion vrifie, cliquez sur OK pour quitter la bote Ajouter une connexion. De retour dans lcran Choisir votre connexion de donnes, cliquez le sigle devant Chane de connexion pour afficher le dtail de la connexion que vous venez de configurer : Automne 2008 Coach VB.NET Page 57 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Que contient cette chane de connexion ? Elle est compose de plus de couples Cl/Valeur que celle pour Access. Chaque fournisseur a en effet ses spcificits. Ici, on retrouve : Data Source : cette cl indique le nom de service rseau dfini dans Oracle Net Manager. Ce nom regroupe les informations suivantes : le nom du serveur (DEVEXPLOIT), le nom de la base de donnes (DL01), le port TCP/IP utilis ( savoir 1521). Pour tout savoir sur la syntaxe utiliser dans les chanes de connexion ADO.NET : http://msdn.microsoft.com/fr-fr/library/ms254500.aspx Dans lcran Enregistrer la chane de connexion dans le fichier de configuration, modifiez le nom de la chane en : SQLClientsConnectionString.

Automne 2008

Coach VB.NET

Page 58 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Une nouvelle balise dans la section va donc tre ajoute au fichier de configuration du projet avec la dfinition de la chane de connexion vers la base Oracle. Cliquez sur Suivant pour accepter lenregistrement de la connexion. Dans ltape Choisir vos objets de base de donnes, tendez les diffrents objets en cliquant sur pour voir les objets disponibles dans la source SQL Server. Cochez la table Contacts. Toutes les colonnes sont alors automatiquement slectionnes. Modifiez le nom propos par dfaut pour lobjet DataSet par exemple en OracleClientsDataSet. Cliquez Terminer pour terminer la configuration de la source de donnes.

Automne 2008

Coach VB.NET

Page 59 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Vous pouvez ouvrir le fichier app.config pour vrifier la chane de connexion qui a t ajoute la section connectionStrings : Double cliquez sur le fichier OracleClientsDataSet.xsd pour afficher le Concepteur de DataSet et observer les objets qui sont votre disposition pour accder aux donnes : Objet DataTable dans lequel on va stocker les donnes extraites de la base

Objet TableAdapter qui va nous permettre de dialoguer avec la base de donnes et remplir le DataTable.

Automne 2008

Coach VB.NET

Page 60 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

3.2 Manipuler les donnesReste coder lextraction et la mise jour des donnes comme nous lavons fait pour la base Access. 1. Modifiez la dfinition du DataSet dans la dclaration des variables prives de la classe Main pour quelle pointe dsormais sur le groupe de donnes OracleClientsDataSet : Modifiez la dclaration comme suit : Code VB Public Class Main Dim ClientsDataSet As AccessClientsDataSet OracleClientsDataSet Modifiez galement le nom du constructeur de lobjet dans la procdure New :

Code VB Public Class Main Public Sub New() 'Instanciation du DataSet qui va servir travailler sur les donnes ClientsDataSet = New AccessClientsDataSet() OracleClientsDataSet() End Sub 2. Modifiez les gestionnaires dvnement des options de menu Ouvrir et Enregistrer pour quils utilisent le nouveau groupe de donnes : Reprez la procdure OuvrirToolStripMenuItem_Click. Modifiez le nom du constructeur dans la dclaration de lobjet TableAdapter : Code VB Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OuvrirToolStripMenuItem.Click 'Lecture des donnes dans la base de donnes Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() New OracleClientsDataSetTableAdapters.ContactsTableAdapter() 'Extraction des donnes et chargement du DataSet ClientsTableAdapter.Fill(ClientsDataSet.Contacts) 'Configuration du gestionnaire de liaison sur la source de donnes MainBindingSource.DataSource = ClientsDataSet.Contacts 'Liaison du gestionnaire avec les contrles d'affichage de donnes MainDataGridView.DataSource = MainBindingSource MainBindingNavigator.BindingSource = MainBindingSource Automne 2008 Coach VB.NET Page 61 sur 80

Microsoft End Sub

Manipuler des donnes en base Atelier 5

Idem pour la procdure EnregistrerToolStripMenuItem_Click :

Code VB Private Sub EnregistrerToolStripMenuItem_Click() _ Handles EnregistrerToolStripMenuItem.Click Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() New OracleClientsDataSetTableAdapters.ContactsTableAdapter() Try Catch ex As Exception End Try End Sub 3. Testez le fonctionnement de lapplication sur la base de donnes Oracle : Excutez lapplication en cliquant sur (ou touche F5). Cliquez le menu Fichier > Ouvrir pour charger les donnes. Effectuez quelques modifications. Cliquez le menu Fichier > Enregistrer pour sauvegarder les changements. Cliquez menu le Fichier > Ouvrir pour vrifier que vos modifications ont t prises en compte. Bravo ! Vous avez crit une application capable de manipuler des donnes provenant dune base Oracle.

Automne 2008

Coach VB.NET

Page 62 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

4 Travailler avec des donnes de SQL Server 2005 Express EditionEt si vous envisagiez de mettre les mmes donnes que dans lexercice prcdent mais cette fois dans le moteur de SQL Server ? Lobjectif de cet exercice est de vous montrer que ce nest pas plus ou moins compliqu quavec Access. Mme si SQL Server 2005 Express Edition est gratuit, vous bnficiez bien du mme moteur que les autres ditions de SQL Server. Vous pourriez par exemple crer et exploiter des procdures stockes.

4.1 Dfinir la source de donnesLa procdure que nous avons suivie lexercice prcdent sapplique aussi bien une base de donnes Access qu une base de donnes SQL Server. La premire tape consiste donc dfinir une source de donnes pour gnrer un groupe de donnes typ reprenant la structure des objets qui nous intressent dans notre base SQL Server Express. Contexte fonctionnel La base de donnes qui vous est fournie titre dexemple a une structure similaire la base Access de lexercice prcdent. Elle est constitue dune seule table nomme Contacts. Vous trouverez le fichier de donnes Clients.mdf dans le rpertoire Atelier 5\Fichiers utiles. Droulement de lexercice : 2. Crer une nouvelle source de donnes pointant sur le fichier Clients.mdf : Toujours sur la base du projet prcdent ouvert dans Visual Studio, slectionnez le menu Donnes > Afficher les sources de donnes pour afficher la fentre Sources de donnes :

Dans la fentre Sources de donnes, cliquez licne pour ajouter une nouvelle source de donnes au projet (en plus de celle que nous avons dfini pour Access) :

Dans lcran Choisir un type de source de donnes, slectionnez Base de donnes. Coach VB.NET Page 63 sur 80

Automne 2008

Microsoft

Manipuler des donnes en base Atelier 5

Cliquez Suivant. Dans lcran Choisir votre connexion de donnes, cliquez Nouvelle connexion.

Vous devez voir dans la liste la connexion que vous avez construite lexercice prcdent pointant sur la base Access.

Dans la bote Ajouter une connexion, cliquez sur Modifiez pour slectionner le fournisseur de donnes pour accder cette fois-ci une base SQL Server. Slectionnez Fichier de base de donnes Microsoft SQL Server dans la liste des sources de donnes propose :

Automne 2008

Coach VB.NET

Page 64 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Il faut savoir que le fournisseur de donnes pour SQL Server fourni dans le Framework.NET est trs lger et donc trs performant. Il est en effet optimis de faon accder directement SQL Server, sans ajout dune couche OLEDB ou ODBC comme cest le cas pour le fournisseur que nous avons utilis lexercice prcdent pour accder la base Access :

Validez la slection du fournisseur en cliquant OK. De retour dans lcran Ajouter une connexion, cliquez Parcourir droite de la zone de nom de fichier de base de donnes. Slectionnez le fichier de base de donnes Microsoft SQL Server 2005 Clients.mdf fourni en exemple dans le dossier ..\Atelier 5\Fichiers utiles :

Automne 2008

Coach VB.NET

Page 65 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Cliquez Ouvrir. Gardez loption de scurit par dfaut qui utilise lauthentification Windows. Avant de valider la connexion tablie, utilisez le bouton Tester la connexion de la bote Ajouter une connexion pour vrifier que Visual Studio est mme dtablir la connexion sur la base de donnes avec les lments que vous lui avez fournis :

Un message vous informe si la connexion a pu tre tablie ou non. Une fois la connexion vrifie, cliquez sur OK pour quitter la bote Ajouter une connexion. De retour dans lcran Choisir votre connexion de donnes, cliquez le sigle devant Chane de connexion pour afficher le dtail de la connexion que vous venez de configurer :

Automne 2008

Coach VB.NET

Page 66 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Que contient cette chane de connexion ? Elle est compose de plus de couples Cl/Valeur que celle pour Access. Chaque fournisseur a en effet ses spcificits. Ici, on retrouve : - Data Source : cette cl dtermine le nom de linstance SQL Server dans laquelle est prise en charge la base de donnes. Une instance de SQL Server Express Edition est une instance nomme donc elle suit le format : \ Le nom de la machine peut tre substitu par un point et le nom de linstance est SQLEXPRESS. - AttachDbFilename : cette cl indique le nom du fichier de base de donnes dextension *.mdf prcd du chemin daccs complet. Grce cette cl, vous navez pas vous soucier dattacher le fichier de donnes au moteur SQL Server via la console de gestion de SQL Server. Le Framework .NET va attacher lui-mme la base au serveur de manire automatique chaque excution de lapplication. Pratique non ? - Integrated Security : cette cl indique que vous vous appuyez sur lauthentification Windows. Mais alors comment est-ce quun compte utilisateur local va tre mme dattacher dynamiquement la base de donnes au moteur SQL Server Express ? En fait, cest grce une nouvelle fonctionnalit de SQL Server Express quon appelle instances utilisateur. Il sagit dune instance spare du moteur de base de donnes qui est gnre automatiquement et qui permet donc lutilisateur de se connecter sans avoir de privilges administrateurs systme. - User Instance : cette cl indique que vous allez justement utiliser Automne 2008 Coach VB.NET Page 67 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 une instance utilisateur de SQL Server Express. Elle va tre gnre par linstance parent que vous avez indiqu dans la cl Data Source. Connect Timeout : indique le temps maximum (en secondes) pour tablir la connexion. Au-del, la connexion choue.

-

Pour tout savoir sur la syntaxe utiliser dans les chanes de connexion ADO.NET : http://msdn.microsoft.com/fr-fr/library/ms254500.aspx Pour en savoir plus sur les instances utilisateur de SQL Server Express : http://msdn.microsoft.com/fr-fr/library/ms254504.aspx Validez en cliquant Suivant. Visual Studio dtecte que vous utilisez un fichier de donnes et vous suggre de linclure en tant que fichier dans le projet.

Noubliez pas quen rpondant Oui la question, la chane de connexion va donc tre mise jour pour pointer non plus sur le chemin initial du fichier de donnes mais sur le rpertoire de lapplication dfini via la chane de substitution |DataDirectory|. Rpondez Oui la question. Dans lcran Enregistrer la chane de connexion dans le fichier de configuration, modifiez le nom de la chane en : SQLClientsConnectionString.

Automne 2008

Coach VB.NET

Page 68 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Une nouvelle balise dans la section va donc tre ajoute au fichier de configuration du projet avec la dfinition de la chane de connexion vers le fichier de donnes SQL Server. Cliquez sur Suivant pour accepter lenregistrement de la connexion. Dans ltape Choisir vos objets de base de donnes, tendez les diffrents objets en cliquant sur pour voir les objets disponibles dans la source SQL Server. Cochez la table Contacts. Toutes les colonnes sont alors automatiquement slectionnes. Modifiez le nom propos par dfaut pour lobjet DataSet par exemple en SQLClientsDataSet.

Automne 2008

Coach VB.NET

Page 69 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Notez que pour une source SQL Server on dispose galement dobjets Procdures stockes et Fonctions.

Cliquez Terminer pour terminer la configuration de la source de donnes.

Nouveau groupe de donnes

Fichiers du groupe de donnes

Vous pouvez ouvrir le fichier app.config pour vrifier la chane de connexion qui a t ajoute la section connectionStrings :

Automne 2008

Coach VB.NET

Page 70 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

Double cliquez sur le fichier SQLClientsDataSet.xsd pour afficher le Concepteur de DataSet et observer les objets qui sont votre disposition pour accder aux donnes :

Objet DataTable dans lequel on va stocker les donnes extraites de la base

Objet TableAdapter qui va nous permettre de dialoguer avec la base de donnes et remplir le DataTable.

4.2 Manipuler les donnesReste coder lextraction et la mise jour des donnes comme nous lavons fait pour la base Access. 4. Modifiez la dfinition du DataSet dans la dclaration des variables prives de la classe Main pour quelle pointe dsormais sur le groupe de donnes SQLClientsDataSet : Modifiez la dclaration comme suit : Code VB Public Class Main Dim ClientsDataSet As AccessClientsDataSet SQLClientsDataSet Modifiez galement le nom du constructeur de lobjet dans la procdure New : Coach VB.NET Page 71 sur 80

Automne 2008

Microsoft

Manipuler des donnes en base Atelier 5

Code VB Public Class Main Public Sub New() 'Instanciation du DataSet qui va servir travailler sur les donnes ClientsDataSet = New AccessClientsDataSet() SQLClientsDataSet() End Sub 5. Modifiez les gestionnaires dvnement des options de menu Ouvrir et Enregistrer pour quils utilisent le nouveau groupe de donnes : Reprez la procdure OuvrirToolStripMenuItem_Click. Modifiez le nom du constructeur dans la dclaration de lobjet TableAdapter : Code VB Private Sub OuvrirToolStripMenuItem_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) _ Handles OuvrirToolStripMenuItem.Click 'Lecture des donnes dans la base de donnes Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() New SQLClientsDataSetTableAdapters.ContactsTableAdapter() 'Extraction des donnes et chargement du DataSet ClientsTableAdapter.Fill(ClientsDataSet.Contacts) 'Configuration du gestionnaire de liaison sur la source de donnes MainBindingSource.DataSource = ClientsDataSet.Contacts 'Liaison du gestionnaire avec les contrles d'affichage de donnes MainDataGridView.DataSource = MainBindingSource MainBindingNavigator.BindingSource = MainBindingSource End Sub Idem pour la procdure EnregistrerToolStripMenuItem_Click :

Code VB Private Sub EnregistrerToolStripMenuItem_Click() _ Handles EnregistrerToolStripMenuItem.Click Dim ClientsTableAdapter = _ New AccessClientsDataSetTableAdapters.ContactsTableAdapter() New SQLClientsDataSetTableAdapters.ContactsTableAdapter() Try Catch ex As Exception End Try End Sub

Automne 2008

Coach VB.NET

Page 72 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

6. Testez le fonctionnement de lapplication sur la base de donnes SQL Server : Excutez lapplication en cliquant sur (ou touche F5). Cliquez le menu Fichier > Ouvrir pour charger les donnes. Effectuez quelques modifications. Cliquez le menu Fichier > Enregistrer pour sauvegarder les changements. Cliquez menu le Fichier > Ouvrir pour vrifier que vos modifications ont t prises en compte. Bravo ! Vous avez crit une application capable de manipuler des donnes provenant dune base SQL Server.

Automne 2008

Coach VB.NET

Page 73 sur 80

Microsoft

Manipuler des donnes en base Atelier 5

5 Pour aller plus loin avec SQL server 5.1 Dfinir de nouvelles requtes utilisant des procdures stockesContexte fonctionnel Imaginez que vous souhaitiez donner la possibilit de rapatrier les clients en fonction dun pays donn. Par exemple avec une option de menu du type :

Liste droulante qui permet de slectionner un pays dtermin dont on veut extraire la liste de contacts.

Lobjectif est de charger dans la liste uniquement les clients du pays voulu :

Par exemple tous les clients franais.

Droulement de lexercice : Lobjectif est de vous montrer quavec les nombreux outils de Visual Studio que sont le Concepteur de DataSet, le Concepteur de DataAdapter, lExplorateur de bases de donnes, lAssistant Automne 2008 Coach VB.NET Page 74 sur 80

Microsoft

Manipuler des donnes en base Atelier 5 Configuration Sources de donnes, il existe de nombreuses possibilits dextension de ce que nous avons mis en place dans les deux exercices prcdents. Par exemple, nous allons rajouter une requte lobjet TableAdapter partir du Concepteur de DataSet pour construire la requte qui rapatrie une liste de contacts en fonction dun pays pass en paramtre. Au passage, lexercice montre comment crer une procdure stocke sur la base de la requte souhaite dans la base SQL Server

1. Crez une nouvelle requte sur lobjet ContactsTableAdapter : Affichez le Concepteur de DataSet en double cliquant sur le fichier SQLClientsDataSet.xsd dans lExplorateur de solutions. Slectionnez lobjet ContactsTableAdapter. Faites un clic droit > Ajouter une requte Dans lcran Choisissez un type de commande, slectionnez Crer une nouvelle procdure stocke puis cliquez Suivant. Dans lcran Choisir un type de requte, slectionnez SELECT qui retourne des lignes puis cliquez Suivant. Dans lcran Gnrer la procdure stocke, entrez la requte comme suit :

La requte attend le nom du pays en paramtre

Utilisez le Gnrateur de requtes pour vous aider construire la requte e