Académique Documents
Professionnel Documents
Culture Documents
(Rsum)
Le concept de Base de Donnes est largement utilis dans tous les domaines qui
impliquent linformatique. Visual Basic est, par excellence, un langage qui facilite le travail
avec ce concept. Avant de commencer prsenter les liaisons entre VB et les bases de
donnes, faisons une brve introduction au concept de base de donnes.
Une base de donnes est une structure spcialement conue pour la gestion de
grandes quantits de donnes. Par gestion on comprend lajout, la suppression, la modification et lutilisation (calculs, manipulations, slections, affichage, etc..) de donnes de
diffrents types. Dune base lautre, les types de donnes peuvent tre diffrents. Par
exemple dans une base de type Access il existe le type boolen (par exemple Vrai/Faux ou
Oui/Non, etc.) tandis que dans une base de type MSSQL ce type nexiste pas et, donc, il
faudrait le remplacer par un autre char*1 ("V"/"F") ou mme entier (0/-1). La faon
denregistrer les donnes ainsi que la faon de lire les donnes peut diffrer dun type de
base lautre. cause des diffrences entre les bases de donnes, la manire avec laquelle
on travaillera sera aussi diffrente.
Dans ce texte, nous allons analyser les liaisons entre VB et les bases de donnes
relationnelles. Parmi les bases de donnes relationnelles nous prendrons lexemple de
Access.
La base BaseTP4.MDB
Cette base de donnes est constitue de 3 tables, trois ensembles de donnes
regroupes, lune contenant les donnes sur les tudiants inscrits, une autre sur les
dpartements dattache de ces tudiants et la dernire sur les groupes o sont classs les
tudiants.
La table IFT1175 :
Nom du champ
Type de donnes
NOM
CODEPERM
GROUPE
Octet
Num DEPT
REMARQUE
INTRA
FINAL
TP
On notera que la fiche de ltudiant contient le numro du dpartement plutt que le nom
du dpartement et le numro de groupe plutt que sa description. Notez aussi que le nom du
champ Num Dept contient un espace, ce qui est permis en Access.
IFT 1975 / E05
Page 1
ADO.NET, Module 4
La table Fac-Dept :
Nom du champ
Type de donnes
NumDEPT
DEPT
La table Groupes :
Nom du champ
Type de donnes
NumGroupe
Description
On pourra donc aller chercher des donnes soit dans une table (ex. Liste des nom des
tudiants avec leur note de l'intra) ou dans plusieurs tables (ex. Liste des tudiants dont le
nom du dpartement est "Chimie" ou bien Liste des tudiants (Nom et Code permanent)
avec le nom de leur dpartement et l'horaire de leur cours.
Page 2
ADO.NET, Module 4
version mise jour (amliore) de ADO : les outils ADO.NET qui peuvent grer les types de
bases les plus varies, incluant mme des fichiers texte, Excel, Serveurs SQL, pages Web,
intranets, banques dimages, etc.
Microsoft recommande donc dutiliser le modle ADO.NET puisque les outils ADO
seront abandonns ventuellement. Ceci dit, toute la structure de ces objets est bicphale :
la partie OleDb pour la plupart des fournisseurs de donnes actuels et la partie SQLClient
spcialise pour la gestion des bases fournies par la version 7 (et ultrieure) du serveur SQL
de Microsoft.
Tous les outils de traitement des donnes sont contenus dans l'espace de nom
System.Data qui apparat par dfaut dans les rfrences de dpart. Pour accder aux
outils OleDb, il suffit de mentionner au dbut d'un module :
Imports System.Data.OleDb
Classes OleDb
L'ensemble de la technologie OLE DB, intgre au FrameWork.NET, permet au
programmeur de crer des commandes qui sont indpendantes des bases de donnes
utilises en passant par les diffrents objets intermdiaires qui servent alors d'interface. On
change de base ? On ajuste les interfaces et on n'a pas modifier le programme.
Classe OleDbConnection
Un objet de cette classe possde une proprit fondamentale de type String, la
ConnectionString qui dcrit la fois le type de liaison (le moteur de recherche et le fichier
ou base ouvrir). Supposons que la variable String contient un texte adquat, alors on
peut crire
Dim UneConn As OleDbConnection
UneConn = New OleDbConnection
UneConn.ConnectionString = UneChaine
UneConn.Open()
' Mthode qui ouvre la connexion.
qui ouvrira alors la connexion. En cas d'erreur dans la chane de correction, il y aura
interruption du programme avec un message de VB.
partir de ce moment, on peut utiliser deux ou trois classes d'objets pour, ou bien lire
les donnes de la base, ou bien les modifier et les mettre jour.
Aprs la lecture des donnes, on peut bien sr fermer la connexion avec
UneConn.Close()
Proprit ConnectionString
Si on ne connat pas le libell de la chane de connexion adquate, on peut utiliser un
outil dvelopp en VB6 pour la dfinir facilement : le fichier XXX.udl. Un fichier de type
Universal Data Link contient une chane de connexion qui peut tre modifie par un
diteur Assistant des liaisons de donnes.
IFT 1975 / E05
Page 3
ADO.NET, Module 4
5. Selon le type de base, les autres onglets serviront dfinir l'environnement de l'accs,
comme le mot de passe, les permissions partages, etc. Dans le cas d'une simple
base Access, les deux premiers onglets peuvent suffire.
6. Dans l'onglet Fournisseur, on slectionne Microsoft Jet xx OLE DB Provider.
7. Dans l'onglet Connexion, on peut taper le nom de la base ou bien naviguer sur
l'ordinateur (bouton [...]) pour localiser la base. Si on dsire que le fichier soit en
adressage relatif, il faut supprimer le chemin pour ne laisser que le nom.
8. Aprs avoir ferm l'application, il suffit d'ouvrir le fichier avec WordPad, NotePad ou
tout autre diteur de texte et vous y trouverez la chane de connexion qu'il suffira de
Copier/Coller dans votre programme VB :
[OleDb]
; Everything after this line is an OLE DB initstring
Provider=Microsoft.Jet.OleDb.4.0;Data Source=BaseTP4.mdb;Persist Security Info=False
Vous noterez que le nom du fichier peut varier d'une application l'autre. C'est
pourquoi on peut sparer la chane en trois sections : le nom de la base, la partie qui le
prcde et la partie qui le suit. On peut alors reconstituer la chane en concatnant les trois
parties avant de l'utiliser.
Page 4
ADO.NET, Module 4
Classe OleDbCommand
Une base de donnes, par dfinition, contient de nombreuses donnes de sorte
qu'une interrogation consiste soumettre une requte spcifiant les informations
dsires. Le langage standard d'interrogation des bases de donnes remonte aux annes
70 et continue de dominer le march des SGBD (systme de gestion de bases de
donnes). Il s'agit du SQL (Structured Query Language ou Langage de requtes structur).
Une requte SQL est une chane de caractres (ex. SELECT * FROM XXX o XXX
est le nom d'une table de la base voir plus haut).
Si on prsume que la chane UneReqSQL contient une requte valide en fonction
de la base de donnes vise par la commande, un objet de la classe OleDbCommand
peut associer cette requte SQL un objet OleDbConnection comme suit :
Dim UneCommande As OleDbCommand
UneCommande = New OleDbCommand
UneCommande.Connection = UneConn
UneCommande.CommandText = UneReqSQL
Une fois que la commande est dfinie (requte plus connexion), on doit appeler une
mthode (parmi plusieurs) permettant de lancer (excuter) cette requte en vue de
recevoir les rsultats demands.
Classe OleDbDataReader
L'objet de classe OleDbDataReader est une interface vers les donnes permettant
d'accder squentiellement aux donnes obtenues partir de l'objet prcdent, de classe
OleDbCommand. Il s'utilise avec une requte dont l'effet est de ramener un jeu
d'enregistrements, c'est--dire une squence de lignes d'une table dont les colonnes sont les
champs de la base de donnes. On l'obtient comme suit :
Dim UnDataReader As OleDbDataReader
UnDataReader = UneCommande.ExecuteReader()
Grondin, Gontran
89
78
OUEP25627020
Ouellette, Paulette
86
91
LAUR25017418
Laurent, Rolland
61
58
Page 5
ADO.NET, Module 4
Alors la squence d'noncs suivante ouvrira une connexion la base de donnes puis,
dans une boucle de trois itrations, affichera le nom et la moyenne des deux examens dans
une bote de message. Notez que la proprit Item tant la proprit de dfaut,
l'expression UnDataReader(3) quivaut UnDataReader.Item(3)
Dim UneChaineSQL As String = "SELECT CodePerm, Nom, Intra, Final " _
& "FROM IFT1175 WHERE [Num DEPT] = 12"
Dim UneChaineConn As String = _
"Provider=Microsoft.Jet.OleDb.4.0;" _
& "Data Source=BaseTP4.mdb;" _
& "Persist Security Info=False"
Dim UneConn As OleDbConnection = New OleDbConnection(UneChaine)
UneConn.Open()
' Mthode qui ouvre la connexion.
Dim UneCommande As New OleDbCommand(UneChaineSQL, UneChaineConn)
Dim UnDataReader As OleDbDataReader
UnDataReader = UneCommande.ExecuteReader()
Dim UnMess As String, UneMoy As Single
Do While UnDataReader.Read() ' sous-entendu = True
UnMess = UnDataReader.Item("Nom") & " a une moyenne de : "
UneMoy = (UnDataReader(2) + UnDataReader.Item(3)) / 2
' quivaut UnDataReader("Intra") et UnDataReader("Final")
UnMess = UnMess & UneMoy.ToString
MsgBox(UnMess)
Loop
UnDataReader.Close()
UneConn.Close()
Type
Membre
OleDbConnection
Proprit lect-cr
ConnectionString
OleDbCommand
Mthode Sub
Mthode Sub
Proprit lect-cr
Proprit lect-cr
Mthode Objet
Open()
Close()
CommandText
Connection
ExecuteDataReader()
Mthode Objet
ExecuteScalar
Mthode Integer
ExecuteNonQuery
Proprit lect.
FieldCount
Proprit lect.
HasRows
Proprit lect.
Mthode Boolean
Item(Index)
Read()
OleDbDataReader
Close()
Page 6
Description
Chane de texte dfinissant la source
d'information : fournisseur et base.
Ouvre la connexion.
Ferme la connexion.
Chane de texte contenant la requte SQL.
Objet de type OleDbConnection.
Excute la commande et retourne un objet de
classe OleDbDataReader
Excute la commande et retourne la premire
valeur obtenue de la base de donnes.
S'utilise avec une requte qui va chercher une
seule valeur comme une somme ou un
dcompte dans les donnes.
Excute la commande et retourne le nombre
de lignes affectes. S'utilise avec une requte
qui modifie, ajoute ou supprime des donnes.
Indique (boolen) le nombre de champs
(colonnes) disponibles via la proprit Item.
Indique (boolen) si le nombre
d'enregistrements est suprieur zro.
Obtient la valeur de la colonne Index.
Tente de lire le prochain enregistrement de
la base et retourne Vrai ou Faux selon que la
lecture a eu lieu ou non.
Ferme l'objet mais non la connexion.
ADO.NET, Module 4
Page 7
ADO.NET, Module 4
Schma gnral
On peut schmatiser les lments qui vont suivre dans une chane progressive entre
les donnes de la base et les contrles de la feuille :
Connexion
Classe OleDbConnection
On utilisera ici aussi l'outil de connexion dj utilis l'tape prcdente. Se rappeler
simplement les deux lments essentielles de la proprit principale (ConnectionString) de
cet objet : le fournisseur de service et le nom de la base utilise.
Dans le cas des mises jour, ADO.NET prvoit que la connexion est tablie, que les
donnes sont transfres en mmoire et que la connexion est immdiatement ferme. Ainsi,
on vite de surcharger le rseau dans le cas d'une base centralise (ce qui est le plus
souvent le cas dans les applications commerciales des bases de donnes). Une fois les
mises jour effectues localement en mmoire, la connexion est r ouverte, les donnes
modifies retransmises dans la base et la connexion referme.
Classe OleDbDataAdapter
L'objet de cette classe (un DataAdapter) constitue le coeur de l'interface (le pont)
entre la base de donnes et le programme. C'est celui qui transfre les information entre la
base et l'application en convertissant au besoin les donnes de faon ce qu'elles puissent
tre traites localement comme s'il s'agissait d'une base de donnes relationnelle, quel
que soit leur format dans la source. Les deux proprits qui permettent d'aller chercher les
donnes sont les mmes que pour le OleDbCommand, soit la connexion
(OleDBConnection) et la chane SQL sous forme de variable ou constante, ou sous forme
d'une commande OleDbCommand. :
Dim UnAdapt As New OleDbDataAdapter("unechaineSQL", UneConn)
Dim UnAdapt As New OleDbDataAdapter(UneCommande, UneConn)
Une fois que les 4 chanes SQL sont dfinies, les mthodes Fill et Update du
DataAdapter transfreront les informations dans un sens et dans l'autre.
IFT 1975 / E05
Page 8
ADO.NET, Module 4
Classe DataSet
L'objet Dataset est un espace de mmoire qui contient une structure de base de
donnes relationnelle, c'est--dire qu'il contient des tables de donnes et des liaisons
entre ces tables. TOUTES les donnes se trouvent dans la ou les tables du DataSet et
TOUT le travail de mise jour s'y fera. Un DataSet simple ne contient qu'une table. Un
DataSet complexe contient plusieurs tables. De fait, le DataSet contient une collection de
tables nomme Tables. Ainsi, l'accs une table peut se faire par la proprit Tables :
Dim UnDataSet As DataSet
... ' le contenu d'une base y est transfr
Un DataSet n'a pas de mthode pour aller chercher des donnes. Il attend qu'on
(le DataAdapter) les lui donne UnAdapt.Fill(). Une fois une ou des tables ajoutes sa
collection, on peut y accder par le rang (base 0) ou par le nom. qu'on a donn la table.
Comme la proprit Item est la proprit de dfaut de Tables, les noncs suivants seront
quivalents si le nom de la premire table est MaListe :
Dim
Dim
Dim
Dim
UneTable
UneTable
UneTable
UneTable
As
As
As
As
DataTable
DataTable
DataTable
DataTable
=
=
=
=
UnDataSet.Tables.Item(0)
UnDataSet.Tables.Item("MaListe")
UnDataSet.Tables(0)
UnDataSet.Tables("MaListe")
Sauf que dans le cas prcdent, pour que la mthode Update russisse, il faut que
les chanes SQL appropries aient t dfinies. La classe OleDbCommandBuilder
permet de crer ces chanes automatiquement. On ajoute donc avant d'utiliser Updata
l'nonc :
Dim UnBuid As New OleDbCommandBuilder(UnAdapt)
Page 9
ADO.NET, Module 4
Classe DataTable
Les objets DataTable sont des jeux d'enregistrements qui sont obtenus par une
requte de slection (extraction) SQL lors de l'excution de la mthode Fill. En gnral, si
on dsire obtenir plusieurs tables, on dfinira plusieurs objets DataAdapter qui contiendront
chacun la chane SQL approprie. Ainsi, sur la feuille frmNotes qui traitera des
informations provenant des trois tables de la base de donnes, la chane SQL ira chercher
les donnes non pas dans les tables de Access mais dans une requte dj dfinie Liste
globale et le rsultat de la mthode Fill sera une seule table.
Une fois la table remplie, on peut accder aux donnes au moyen de ses proprits
d'accs. Le jeu d'enregistrement est trait comme un tableau deux dimensions form soit
d'un ensemble de lignes (proprit Rows) de type collection contenant des champs, soit un
ensemble de colonnes (proprit Columns) de type collection contenant des enregistrements. Ainsi les deux noncs suivants pourraient tre quivalents si les noms de champs
sont bien dfinis et dsigneraient le nom contenu dans le premier enregistrement :
MaTable.Rows(0).Item("Nom") = "Grondin, Gontran"
MaTable.Columns("Nom").Item(0) = "Grondin, Gontran"
Classe DataView
Les objets DataView sont aussi des jeux d'enregistrements. Mais une vue
(comme une requte en Access) permet de rorganiser les donnes de la table par exemple
en les triant, ou bien en filtrant des donnes. Exemple, ne prendre de la table que les
enregistrements o le champ "Intra" est plus grand que le champ "Final" et sortir la liste en
ordre alphabtique.
Dim UneVue As New DataView(MaTable)
UneVue.RowFilter = "Intra < Final" ' Les champs doivent exister
UneVue.Sort = "Nom"
L'utilisation de UneVue se fera de la mme manire que MaTable sauf que les
enregistrements seront prsents diffremmant.
Page 10
ADO.NET, Module 4
Le principe est d'tablir un lien entre une colonne (un champ) de la vue et UNE
proprit du contrle. La plupart du temps, c'est la proprit Text qui est associe au
champ en question mais ce pourrait tre image, une couleur, une police de caractres, etc.
Comme la feuille, c'est ME, on construira donc la liste des liaisons en utilisant la proprit
DataBindings de chacun des contrles associer :
txtCodeP.DataBindings.Add(New Binding("Text", MaDataVue, "CODEPERM"))
cboDept.DataBindings.Add(New Binding("SelectedIndex", MaDataVue, "Num DEPT"))
proprit
Page 11
synchronisera
les
contrles
ADO.NET, Module 4
et
En tradition avec les versions prcdentes de Visual Basic, VB.NET offre des outils
automatiques et des assistants pour les ajuster, le but tant de dfinir une connexion la
base sans avoir la programmer. Pour ce faire, VB met la disposition du programmeur une
section de la bote d'outils intitule Donnes (Data) contenant la plupart des classes dj
vues sous forme de contrles.
Plutt que de crer la liste des objets l'excution, on peut dfinir chaque tape des
la liaison avec les contrles au moment du design. L'assistant prsente des botes de
dialogue o il suffit de fournir les principales informations demandes. Parmi les classes
d'objets disponibles, on note les classes dj rencontres, soit les OleDBConnection, les
OleDBCommand. les OleDbDataAdapter, les DataSet et les Dataview avec en plus
Classe DataGrid
Le point central de l'opration est certes l'utilisation du contrle DataGrid car celui-ci
peut afficher directement un jeu de caractre quelconque. Mieux, comme il s'agit d'un
contrle dynamique, il suffit de lui affecter un jeu d'enregistrement pour qu'il s'adapte
celui-ci. En effet, le nombre, le titre et la largeur des colonnes est dfini en fonction du jeu
d'enregistrement qui l'alimente. Mieux, si on lui affecte plus d'un jeu d'enregistrements, le
DataGrid se retrouve muni d'un bloc d'onglets permettant de choisir laquelle des tables
correspondantes sera affiche.
L'information ne circule pas directement du DataGrid vers la base : elle doit transiter
par une Table d'un DataSet. La proprit DataSource du DataGrid permettra donc de faire le
lien avec le DataSet utilis et avec la table qui s'y trouve.
Page 12
ADO.NET, Module 4
Selon que le DataAdapter qui lui sera associ pourra ou non modifier les
enregistrements, les informations du DataGrid pourront ou non tre mises jour. Dans ce
dernier cas, il est prfrable de mettre sa proprit ReadOnly True pour viter que
l'utilisateur ait la fausse impression de fasse des changements qui ne seront jamais transmis
sa base de donnes.
Enfin, la faiblesse actuelle du contrle est la difficult d'en modifier le format, ce qui
sera srement amlior lors d'une prochaine version de VB.NET. Notez cependant qu'une
fois les donnes affiches, l'utilisateur peut grer la largeur des colonnes et trier les
informations sur chacune de celles-ci, au choix, en cliquant sur la tte de colonne.
Classe OleDbConnection
Bien que l'objet de classe OleDbConnection existe dans la bote d'outils, on
l'utilisera rarement puisque l'assistant DataAdapter permettra soit d'utiliser une connexion
dj tablie, soit d'en crer une nouvelle. Notez qu'une mme connexion peut servir
plusieurs DataAdapter.
Classe OleDbDataAdapter
En
dposant
sur
la
feuille
un
contrle
Page 13
ADO.NET, Module 4
Classe DataSet
Pour chaque grille, on ajoutera un contrle DataSet qui pourra recevoir le jeu
d'enregistrement dfini par la chane SQL de chaque DataAdapter. Une fois la grille
associe au DataSet, il n'y aura plus qu' commander le dplacement des informations de la
base au DataSet, donc vers la grille, et de la grille (via le DataSet) vers la base de donnes.
Attention cependant! Comme ADO.NET est bas sur le traitement indpendant des
donnes en mmoire, il faudra procder au transfert PAR PROGRAMMATION. Pour ce faire,
le DataSet possde une mthode Fill(UnDataSet, "nom_d'une_table") qui ouvre la
connexion, lance l'appel la requte SQL SELECT... , place le jeu d'enregistrements dans
la table nomme et referme la collection. Comme le DataGrid est li la table, les
informations y sont directement accessibles. On utilise cette mthode lors du chargement de
la feuille ou bien en cours d'excution (via un bouton de commande) chaque fois que l'on
dsire recharger les informations de la base (par exemple si une autre grille y a plac des
mises jour).
En parallle, si le DataAdapter a pu gnrer les requtes SQL adquates, lors la
mthode Update(UnDataSet, "nom_d'une_table") ou Update(UnDataSet) mettra jour les
informations contenue dans une table ou dans toutes les tables du Dataset au moyen de ces
chanes SQL. Le DataAdapter ne transfrera bien sr que les enregistrement modifis et la
mthode retournera une valeur entire reprsentant le nombre d'enregistrements touchs
(crs, modifis ou supprims). Ici aussi, la connexion sera ouverte et referme
automatiquement.
On utilisera cette mthode soit la fermeture de l'application, soit au besoin au moyen
d'un bouton de commande.
Page 14
ADO.NET, Module 4