Chapitre 6:
ADO.Net : Travailler en mode
non connecté
1
Le mode non connecté
Le mode non connecté :
• Pas de connexion permanente avec la source
de données.
• La connexion est établie, les données sont
extraites puis la connexion est coupée.
Il faut conserver localement les données sur
lesquelles on veut travailler.
2
Le mode non connecté
• Principe: recréer, à l’aide de différentes classes,
une organisation similaire à celle d’une base de
données :
– DataSet : ≈ BD
– DataTable : ≈ table d‘une BD
– DataRow : ≈ ligne d‘une table (un enregistrement)
– DataColumn : ≈ colonne d‘une table (champ)
– UniqueConstraint : ≈ clé primaire d‘une table
– ForeignKeyConstraint : ≈ clé étrangère d‘une table
– DataRelation : un lien Parent/Enfant entre 2
DataTable
3
Classes du mode non connecté
4
DataAdapter
• Travailler localement avec des données
Charger les données depuis une BD vers un
DataSet (c’est une représentation en mémoire
des données)
• Chaque fournisseur fournit une classe
DataAdapter : assure le dialogue entre BD et
DataSet :OleDbDataAdapter, SqlDataAdapter,..
• DataAdapter assure les échanges de données :
– De la BD vers le DataSet (remplir le DataSet)
– Du DataSet vers la BD (mettre a jour la BD)
5
DataAdapter
• DataAdapter nécessite une connexion
(OleDbConnection) pour contacter le serveur
et une ou plusieurs commandes
(OleDbCommand) pour le traitement des
données.
6
Remplissage d‘un DataSet
Advertisement
Avec du code
7
DataAdapter : BD DataSet
Etapes pour le remplissage d‘un DataSet :
1. Créer un objet OleDbConnection (e.g. cn)
2. Créer un objet OleDbCommand basé sur une requête SQL
SELECT (e.g. cmd1)
3. Creer un objet OleDbDataAdapter (e.g. da1)
4. Affecter l‘objet cmd1 à la propriété SelectCommand de
l‘objet OleDbDataAdapter (e.g.
da1.SelectCommand=cmd1)
• NB. Un DataAdapter possède aussi les propriétés :
InsertCommand, UpdateCommand et DeleteCommand
(pour le cas DataSet BD )
5. Creer un objet DataSet (e.g. ds)
6. Appeler la méthode Fill du dataAdapter pour remplir le
DataSet créé avec le résultat de l‘exécution de la
commande SelectCommand du DataAdapter (e.g.
da1.Fill(ds, "srcTable"))
8
Méthode Fill
• objDataAdapter.Fill (nom_DataSet,
"src_Table")
nom_DataSet : le data set à remplir
src_Table : nom de la DataTable à remplir avec
les données retournées.
Fill : Ajoute ou actualise les lignes de
src_Table de nom_DataSet pour qu'elles
correspondent à celles de la source de
données
9
Méthode Fill
• Remarques :
• Si src_Table n’existe pas dans le DataSet, une DataTable
sera créée sinon la méthode Fill utilisera la structure
existante.
• Lorsque le DataAdapter construit la DataTable, les
noms des champs de la base sont utilisés pour nommer
les DataColumn
• Un DataSet peut contenir plusieurs DataTable créées a
partir de DataAdapter différents.
• La méthode Fill ne transfère pas les contraintes de clés
primaires : il faut ajouter l‘ins° :
da1.MissingSchemaAction=MissingSchemaAction.AddWithKey
10
Exemple 1 : récupérer tous les clients
11
Exemple 1 : récupérer tous les clients
Advertisement
'Indiquer au ListBox d'afficher la table Clients
'Indiquer quelle
colonne afficher
12
Remplissage automatique (Binding)
d‘une ListeBox par un DataSet
13
Exemple 2
Rq: C'est DataSource qui déclenche le
chargement de la ListBox avec la prise en
compte de DisplayMember et ValueMember.
récupérer le «
Contact » quand
l'utilisateur
clique sur le «
Code Client
14
Exemple 2
Quand l'utilisateur clique sur une
ligne de la ListBox, cela déclenche
l'évènement
lstCodes_SelectedIndexChanged, là
on récupère la valeur du « Contact
» qui se trouve dans
lst_Codes.SelectedValue
15
Remplissage automatique (Binding)
d‘un DataGridView par un DataSet
16
Exemple 3 : Afficher tous les clients
dans un dataGridView
17
Exemple 3 (résultat)
18
Navigation entre les
enregistrements
19
Collection Rows du DataTable
• Un objet DataTable contient une collection Rows qui
contient les enregistrements.
Exemple : dim DT as DataTable
•
DT = ds.Tables("Commandes")
DT.Rows(i) enregistrement n° i (objet DataRow)
• La collection Rows possède 2 propriétés :
– item : accéder a une ligne et/ou une colonne par son indice ou
son nom:( DT.Rows.item(i).item(j) ou DT.Rows(i).item(j) ou
DT.Rows(i).item("nom_champ") )
Advertisement
– count : donne le nombre de lignes disponibles dans le DataTable
( DT.Rows.count donne le nombre d‘enregistrements dans DT )
• NB. Les indices [0, objDataTable.Rows.count-1]
20
Exemple 4 : Naviguer entre les
enregistrements
21
Exemple 4 : Naviguer entre les
enregistrements
22
Exemple 4 : Naviguer entre les
enregistrements
23
Exemple 4 : Naviguer entre les
enregistrements
24
Ajout d‘un enregistrement
DataSet BD
25
Ajout d‘un enregistrement
• Utiliser un objet DataRow :
1. Déclarer un objet DataRow enreg
2. Affecter à enreg une nouvelle ligne (vide) dans un
DataTable (en utilisant la méthode NewRow() de la classe
DataTable)
3. Affecter aux champs de enreg les valeurs des champs de
l‘enregistrement à ajouter
4. Ajouter l‘objet enreg à la collection Rows du DataTable en
question (en utilisant la méthode DT.Rows.add(enreg))
5. Créer un objet OleDbCommandBuilder basé sur le
DataAdapter : il assure la génération automatique de la
requête associée à la propriété (InsertCommand) du
DataAdapter.
6. Faire appel à la méthode Update du DataAdapter pour
transférer l‘ajout vers la BD.
DataSet BD
26
Exemple 5 : ajouter un enregistrement
27
Exemple 5 : ajouter un enregistrement
Affecter à enreg une
nouvelle ligne vide
28
Exemple 5 : ajouter un enregistrement
29
Modification d‘un enregistrement
DataSet BD
30
Advertisement
Exemple 6 : modifier un
enregistrement
31
Suppression d‘un enregistrement
DataSet BD
32
Exemple 7 : supprimer un
enregistrement
33
MAJ a partir d‘un DataGridView
34
Exemple 8 : MAJ des clients
35
Exemple 8 : MAJ des clients
36
L‘utilisation d‘un DataView
(Trier, filtrer, chercher,…)
37
Creation d‘un DataView
• Un DataView permet de représenter les données
stockées dans un DataTable dynamiquement.
– Un DataView est lié à un DataTable
– On peut créer plusieurs DataView pour un seul DataTable
• Un DataView permet de
– Trier les données d’un dataTable
– Filtrer les données d’un dataTable
– Chercher des données suite à un tri
• Création : 2 méthodes
1. Dim dv as DataView
dv=ds.Tables("nom_table").defaultView
2. Dim dv as New DataView(ds.Tables("nom_table"))
38
Exemple 9 : Tri des enregistrements
39
Exemple 9 : Tri des enregistrements
40
Exemple 10: filtrer des enregistrements
41
Exemple11: recherche d‘enregistrement
42
Exemple12: recherche
d‘enregistrement (plusieurs critères)
43