Vous êtes sur la page 1sur 56

Environnement de Développement Intégré Accès aux données

Mohamed HARRANE Page 1


Environnement de Développement Intégré Accès aux données

Pour avoir accès à partir de VB.Net aux bases de données, il


faut utiliser la technologie ADO.NET (ActiveX Data Objects).
✓ C’est la couche d’accès aux BD, c-à-d le SGBD de VB.Net
✓ C’est un ensemble de classes, de méthodes et d’évènements
permettant de récupérer et de manipuler des données.
✓ Elle permet un accès à différentes sources de données par
l’intermédiaire de fournisseurs OLE DB qui traduisent les
requêtes dans le langage du système de base de données réel.
✓ La grande force de cette technologie est qu’elle permet une
manipulation identique quel que soit la source de données
(hormis les paramètres de connexion).

Mohamed HARRANE Page 2


Environnement de Développement Intégré Accès aux données

Mohamed HARRANE Page 3


Environnement de Développement Intégré Accès aux données

Plusieurs fournisseurs existent pour les différents SGBD existant sur le


marché. Source de données Fournisseur OLE DB
Microsoft Access OLEDB
SQL Server SQL
Oracle Oracle
ODBC ODBC
MySQL OLEDB

Espace de nom
Espace de Nom Fournisseur OLE DB
System.Data Compatible avec tous les fournisseurs
System.Data.OleDB OLEDB
System.Data.SqlClient SQL
System.Data.OracleClient Oracle
System.Data.ODBC ODBC

Mohamed HARRANE Page 4


Environnement de Développement Intégré Accès aux données

Deux modes existent pour l’utilisation des données dans une


application :
✓ Mode Connecté : l’application client a un accès direct à la source de
données.
✓ Mode déconnecté : il est possible de travailler sur des données sans
avoir un accès direct et permanent à la base.
Mode connecté
Les objets utilisés dans ce mode sont :
▪ Connection : permet d’établir une connexion avec la source de
données.
▪ Command : permet d’exécuter des traitements ou de modifier / lire
des données sur la source, c’est lui qui contiendra la requête SQL.
▪ DataReader : permet de parcourir, en lecture seule, l’ensemble des
enregistrements récupérés par la requête. Il est créé par l’objet
Command

Mohamed HARRANE Page 5


Environnement de Développement Intégré Accès aux données

Mode déconnecté

❑ Dans ce mode, le traitement des données se fait en 3 étapes :


• Récupération des données à partir de la source.
• Modification des données en mode déconnecté.
• Intégration des données modifiées à la source avec
éventuellement résolution des conflits (contraintes d’intégrité).

❑ Les objets utilisés dans ce mode sont :


✓ Connection : permet d’établir la connexion.
✓ DataAdapter : contenant la requête Select. Il sert de liaison entre
la source de données et l’objet dataSet.
✓ DataSet : a la structure d’une base de données mais en local. Il
peut être rempli par l’objet DataAdapter ou bien crée
indépendamment d’une source de données.

Mohamed HARRANE Page 6


Environnement de Développement Intégré Accès aux données

DataSet

DataAdapter Lecture de données


SelectCommand
Base de
InsertCommand
Données
UpdateCommand
DeleteCommand Mise à jour de données

Pour utiliser un DataSet, il faut importer l’espace de nom System.data


Un DataSet peut être composé de :

–DataTable –DataRelation
–DataRow –Constraint
–DataColumn –DataView

Mohamed HARRANE Page 7


Environnement de Développement Intégré Accès aux données

Mohamed HARRANE Page 8


Environnement de Développement Intégré Accès aux données

Afin d’établir une connexion avec la BD, il faut créer un objet


connection en instanciant la classe Connection spécifique au
fournisseur d’ accès de BD.
Fournisseur OLE DB Classe
ODBC OdbcConnection
OLEDB OleDbConnection
SQL Server SqlConnection

Parmi les propriétés de cette classe :


Propriétés Description
Chaîne utilisée pour la connexion contenant le
ConnectionString fournisseur OLE DB et le chemin d’accès de la
Base de données.
State État de la connexion

Mohamed HARRANE Page 9


Environnement de Développement Intégré Accès aux données

Parmi les paramètres de la chaine de connexion ConnectionString


Paramètres Description
Provider Le fournisseur d’accès.
Data Source L’emplacement de la base de données.
ConnectionTimeOut Délai en secondes maximum pour l’établissement
de la connexion.

La liste des providers possibles selon la source de données :


Source de données Fournisseur Chaîne de connexion
Microsoft Access 2003 OLEDB Microsoft.Jet.OLEDB.4.0
Microsoft Access 2007 OLEDB Microsoft.ACE.OLEDB.12.0
SQL Server SQL SQLOLEDB
Oracle Oracle OracleOLEDB.oracle
ODBC ODBC MSDASQL
MySQL OLEDB MySQLProv

Mohamed HARRANE Page 10


Environnement de Développement Intégré Accès aux données

Exemple

Public CN As OleDbConnection = New OleDbConnection


(″Provider=Microsoft.ACE.OLEDB.12.0; Data Source =
D:\Data\Stock.accdb ; ConnectionTimeOut =50″)

Permet d’établir une connexion avec la BD de nom


″Stock.accdb″ qui est une base de données Access 2007 dont
le délai maximal est égal à 50.

ConnectionTimeOut : Durée d'attente (en secondes) préalable à


l'établissement d'une connexion au serveur avant que la tentative ne
soit abandonnée et qu'une erreur ne soit générée.
Les valeurs valides sont supérieures ou égales à 0 et inférieures ou
égales à 2 147 483 647.

Mohamed HARRANE Page 11


Environnement de Développement Intégré Accès aux données

❖ La propriété state peut avoir les valeurs suivantes :


– Closed : fermée
– Connecting : En cours de connexion
– Open : ouverte
– Executing : En exécution
– Fetching : Extraction de données
– Broken : Interrompue

❖ Parmi les méthodes de la classe connection, on cite :


Méthode Description
Open Ouvre la connexion.
Close Ferme la connexion et libère les ressources.
CreateCommand Crée un objet Command.

❖ Après avoir créé l’objet Connection, il faut l’ouvrir avec Open

CN.open()

Mohamed HARRANE Page 12


Environnement de Développement Intégré Accès aux données

Avec un objet DataReader, on extrait les données en lecture


seule : une requête SQL charge le DataReader.
✓ Pour gérer un DataReader, on a besoin d’un objet Command.
✓ Dans ce cas, il faut suivre les étapes suivantes :
• Créer un objet Connection;
• Ouvrir la connexion; (open)
• Créer un objet Command;
• Exécuter la méthode ExecuteReader pour créer l’objet
DataReader ;
• Parcourir les enregistrements par la méthode read.

Mohamed HARRANE Page 13


Environnement de Développement Intégré Accès aux données

Pour créer un objet Command, il faut instancier la classe


correspondante au fournisseur utilisé.
Fournisseur Classe
ODBC OdbcCommand
OLEDB OleDbCommand
SQL Server SqlCommand

Parmi les propriétés de ces classes :


Propriétés Description
CommandText Texte SQL de la requête à exécuter.
Connection Connexion liée à la commande.
CommandTimeOut Nombre de secondes pour l’exécution de la commande

Mohamed HARRANE Page 14


Environnement de Développement Intégré Accès aux données

Parmi les méthodes de la classe command :

Méthode Description

Cancel Annule l’exécution de la commande.

Exécute la requête et retourne un objet de type


ExecuteReader
DataReader.

Exécute la requête et retourne une valeur unitaire (utilisé


ExecuteScalar
avec : count, Max, Avg, …).

Exécute une commande ne retournant pas de lignes


ExecuteNonQuery
(Insertion, modification, suppression …)

Mohamed HARRANE Page 15


Environnement de Développement Intégré Accès aux données

Exemple Création de l’objet


Command à
1ère méthode partir de l’objet
Dim Cmd As OleDbCommand =CN.CreateCommand() connection et sa
Cmd.CommandText = "SELECT NOM FROM Article" méthode
CreateCommand

2ème méthode
Dim Cmd As OleDbCommand = New OleDbCommand()
Cmd.Connection = CN
Cmd.CommandText = "SELECT NOM FROM Article"

Création de l’objet Command en


spécifiant dans la propriété
connection l’objet Connection
concerné.

Mohamed HARRANE Page 16


Environnement de Développement Intégré Accès aux données

✓ L’objet DataReader permet de lire les enregistrements issus


d’une requête.
✓ Pour créer un objet DataReader, il faut tout d’abord instancier
la classe correspondante au fournisseur utilisé.
Fournisseur Classe
ODBC OdbcDataReader
OLEDB OleDbDataReader
SQL Server SqlDataReader

Exemple
Dim DR As OleDbDataReader = Cmd.ExecuteReader()

Mohamed HARRANE Page 17


Environnement de Développement Intégré Accès aux données

✓ Parmi les méthodes de cet objet :


Méthode Description
Close Ferme le DataReader
Avance au prochain enregistrement, retourne True s’il existe
Read
d’autres enregistrements et False s’il n’y en a plus.
GetValue(i) Retourne la valeur du champ sans type à l’indice ‘i’.
GetString,
Retourne la valeur du champ typé à l’indice ‘i’
GetBoolean, …
GetType(i) Retourne le type du champ à l’indice ‘i’
GetName(i) Retourne le nom du champ à l’indice ‘i’
GetOrdinal(nom) Retourne l’indice du champ donné en paramètre.
FieldCount Retourne le nombre de colonnes du DataReader
• L’objet DataReader est lu séquentiellement de la 1ère ligne à la dernière.
• C’est la méthode Read qui permet d’avancer à la ligne suivante.
• Une fois le traitement terminé, il faut fermer la connexion.
CN.close()
Mohamed HARRANE Page 18
Environnement de Développement Intégré Accès aux données

✓ Avec ExecuteScalar de l'objet Command, on peut récupérer


les résultats d'une requête SQL qui contient une instruction
COUNT (comptage) AVG (moyenne) MIN (valeur minimale)
MAX (valeur maximale) SUM (somme)

Exemple
Cmd.CommandText = "SELECT COUNT(*) FROM Article"
Dim Nombre As Integer = Cmd.ExecuteScalar()

Permet de compter le nombre d’articles

Mohamed HARRANE Page 19


Environnement de Développement Intégré Accès aux données

✓ Avec ExecuteNonQuery de l'objet Command, on peut mettre


à jour (INSERT, DELETE, UPDATE ou ajout d’une table) une
BD sans retourner de données.

Exemple

Cmd.CommandText = "insert into Article values


(125,’Disque dur’,550,20)"

Cmd.ExecuteNonQuery()

Permet de mettre à jour la Base de Données.

Mohamed HARRANE Page 20


Environnement de Développement Intégré Accès aux données

Imports System.data.OleDB
Module1
MS Access
Public CN As OleDbConnection
Public Sub Connexion_BD ()
CN = New OleDbConnection
CN.Provider="Microsoft.ACE.OLEDB.12.0"
CN.ConnectionString = " Data Source = D:\Data\Stock.accdb"
CN.open()
End Sub
Module1

Dim Cmd As OleDbCommand = CN.CreateCommand()


Cmd.CommandText = "SELECT NOM FROM Article"
Dim DR As OleDbDataReader = Cmd.ExecuteReader()
Do While DR.read()
ComboBox1.Items.Add(DR.getString(0))
Loop
DR.close()

Mohamed HARRANE Page 21


Environnement de Développement Intégré Accès aux données

Imports System.data.SQLClient
Module1 SQL Server
Public CN As SqlConnection
Public Sub Connexion_BD_Server ()
CN = New SqlConnection
CN.ConnectionString = " Data Source = Nom-Serveur ;
Integrated Security=True; Initial Catalog=BD-Stock"
CN.open()
End Sub
End Module

Dim Cmd As SqlCommand = CN.CreateCommand()


Cmd.CommandText = "SELECT NOM FROM Article"
Dim DR As SqlDataReader = Cmd.ExecuteReader()
Do While DR.read()
ComboBox1.Items.Add(DR.getString(0))
Loop
DR.close()

Mohamed HARRANE Page 22


Environnement de Développement Intégré Accès aux données

Mohamed HARRANE Page 23


Environnement de Développement Intégré Accès aux données

Mode déconnecté

❑ Dans ce mode, le traitement des données se fait en 3 étapes :


• Récupération des données à partir de la source.
• Modification des données en mode déconnecté.
• Intégration des données modifiées à la source avec
éventuellement résolution des conflits (contraintes d’intégrité).

❑ Les objets utilisés dans ce mode sont :


✓ Connection : permet d’établir la connexion.
✓ DataAdapter : contenant la requête Select. Il sert de liaison entre
la source de données et l’objet dataSet.
✓ DataSet : a la structure d’une base de données mais en local. Il
peut être rempli par l’objet DataAdapter ou bien crée
indépendamment d’une source de données.

Mohamed HARRANE Page 24


Environnement de Développement Intégré Accès aux données

DataSet

DataAdapter Lecture de données


SelectCommand
Base de
InsertCommand
Données
UpdateCommand
DeleteCommand Mise à jour de données

Pour utiliser un DataSet, il faut importer l’espace de nom System.data


Un DataSet peut être composé de :

–DataTable –DataRelation
–DataRow –Constraint
–DataColumn –DataView

Mohamed HARRANE Page 25


Environnement de Développement Intégré Accès aux données

Un DataSet (ou groupe de données) est un cache en mémoire qui


représente un jeu de données composé de plusieurs tables, de
relations entre les différentes tables, et de contraintes qui
s’appliquent aux données. Ce cache est déconnecté de la source
de données.

✓ Les données du DataSet peuvent provenir soit :


• de l’application cliente (par exemple données saisies par l’utilisateur
ou calculées par l’application, etc.)
• d’une base de données.
✓ Avant de remplir le DataSet par les données, il faut créer sa
structure.
✓ Pour créer un objet dataSet il faut instancier la classe DataSet.
✓ Exemple
Dim ds1 as new DataSet(″donnees″)

Mohamed HARRANE Page 26


Environnement de Développement Intégré Accès aux données

Parmi les propriétés de l’objet DataSet


Propriété Description
Tables Collection des tables contenues dans le DataSet

Relations Collection des relations qui relient des tables du DataSet.

✓ Une fois crée, on doit lui ajouter des tables et des relations.
✓ Pour créer un objet DataTable il faut instancier la classe
DataTable puis la lier à l’objet DataSet.

Exemple :
Dim personne As New DataTable(″personne″)
ds1.Tables.Add(personne)

Mohamed HARRANE Page 27


Environnement de Développement Intégré Accès aux données

Parmi les propriétés de l’objet DataTable


Propriété Description
Columns Collection des colonnes (champs) de la table

Constraints Collection des contraintes de la table

Rows Collection des lignes de la table

PrimaryKey Tableau de colonnes faisant parti de la clé primaire

Pour ajouter un objet dataColumn à l’objet dataTable, il faut


instancier la classe DataColumn puis la lier à l’objet
DataTable

Mohamed HARRANE Page 28


Environnement de Développement Intégré Accès aux données

En créant une colonne, on doit spécifier plusieurs informations :


• Le nom de la colonne ;
• Le type de la colonne,

Les propriétés de la colonne qui sont résumées dans le tableau


suivant :
Propriété Description
AllowDBNull Autorise la valeur Null
DefaultValue Valeur par défaut de la colonne
Unique Définit si les valeurs de la colonne doivent êtres uniques
Définit si la colonne est un compteur dont la valeur
AutoIncrement
s’incrémente automatiquement
AutoIncrementSeed Valeur de départ de l’incrément
AutoIncrementStep Pas de l’incrément

Mohamed HARRANE Page 29


Environnement de Développement Intégré Accès aux données

Exemple

Dim Cl1 As New DataColumn(″Maticule″, GetType(Integer))


Cl1.AutoIncrement = true
Cl1.AutoIncrementSeed = 1
Cl1.AutoIncrementStep = 1
ds1.Tables(″Personne″).Columns.Add(cl1)
ds1.Tables(″Personne″).PrimaryKey = New DataColumn() {cl1}

Dim cl2 As New DataColumn(″Nom_P″,GetType(String))


Cl2.Unique = true
Cl2.DefaultValue = ″inconnu″ ‘ Valeur par défaut
ds1.Tables(″Personne″).Columns.Add(cl2)
Dim cl3 As New DataColumn(″CodeGrade″,GetType(Integer))
ds1.Tables(″Personne″).Columns.Add(cl3)

Mohamed HARRANE Page 30


Environnement de Développement Intégré Accès aux données

La création d’une relation se fait en créant un objet DataRelation


et en spécifiant les champs des tables qui sont liées.
• Pour créer un objet DataRelation, il faut instancier la classe
DataRelation
• Lors de la création d’une relation, on doit spécifier son nom, le
champ « clé primaire » et le champ « clé étrangère ».

Mohamed HARRANE Page 31


Environnement de Développement Intégré Accès aux données

Exemple :
Dim categorie As New DataTable(″categorie″)
ds1.Tables.Add(categorie)
Dim cl4 As New DataColumn(″CodeCat″, GetType(Integer))
Cl4.AutoIncrement = true
Cl4.AutoIncrementSeed = 1
Cl4.AutoIncrementStep = 1
ds1.Tables(″categorie″).Columns.Add(cl4)
ds1.Tables(″categorie″).PrimaryKey =New DataColumn(){cl4}
Dim cl5 As New DataColumn(″Libelle_Cat″,GetType(String))
ds1.Tables(″categorie″).Columns.Add(cl5)
Dim rel As New DataRelation(″personne_categorie″,
ds1.Tables(″categorie″).Columns(″CodeCat″),
ds1.Tables(″personne″).Columns(″CodeCatP″))
ds1.Relations.Add(rel)

Mohamed HARRANE Page 32


Environnement de Développement Intégré Accès aux données

▪ Une requête SQL charge le DataSet avec des enregistrements


ou des champs.
▪ Pour alimenter un DataSet, on utilise l’objet DataAdapter
qui fait l’intermédiaire entre la BD et le DataSet.
▪ Voici les étapes à suivre :
1. Créer un objet de Connexion (connection)
2. Ouvrir la connexion (open)
3. Créer un objet DataAdapter
4. Remplir les DataTable d’un objet DataSet grâce à la
methode Fill du DataAdapter
▪ Les DataGrid et les ListBox peuvent afficher des données à
partir des DataSet.

Mohamed HARRANE Page 33


Environnement de Développement Intégré Accès aux données

✓ Un DataAdapter est utilisé pour extraire les données d'une source de


données et remplir les tables dans un DataSet.
✓ Le DataAdapter répercute aussi les modifications apportées au DataSet
dans la source de données.
✓ Il utilise l'objet Connection du fournisseur de données .NET Framework
pour se connecter à une source de données, et les objets Command pour
extraire les données de la source et y répercuter les modifications.
✓ La propriété SelectCommand du DataAdapter est un objet Command qui
extrait les données de la source de données. On peut aussi passer
directement en paramètre la commande qui va permettre d’extraire les
données.
✓ Les propriétés InsertCommand, UpdateCommand et DeleteCommand du
DataAdapter sont des objets Command qui gèrent les mises à jour dans la
source de données conformément aux modifications faites dans le DataSet.

Mohamed HARRANE Page 34


Environnement de Développement Intégré Accès aux données

✓ La méthode Fill du DataAdapter est utilisée pour remplir un DataSet


avec les résultats de SelectCommand du DataAdapter.
✓ Fill prend comme arguments un DataSet à remplir et un objet
DataTable ou le nom du DataTable à remplir avec les lignes
retournées par SelectCommand.

Remarque : la méthode Fill ouvre automatiquement la connexion que


le DataAdapter utilise, si la connexion n'est pas déjà ouverte. Dans ce
cas, la connexion sera automatiquement fermée lorsque le Fill est
terminé. Si l’on veut garder la connexion ouverte pendant plusieurs
opérations (pour améliorer les performances de l’application), il faut
appeler de manière explicite la méthode Open de la connexion,
effectuer les opérations sur la source de données puis appeler la
méthode Close de la connexion.
Mohamed HARRANE Page 35
Environnement de Développement Intégré Accès aux données

▪ Pour créer un objet DataAdapter il faut instancier l’une des


classes suivantes :
Fournisseur Classe
OLEDB OleDbDataAdapter

SQL Server SqlDataAdapter

▪ Ensuite, Il faut spécifier la requête Select utilisée pour


remplir le DataSet et indiquer le fournisseur utilisé.

Exemple
Dim Da As new SqlDataAdapter ( ″Select * From Etudiant″, CN)

Mohamed HARRANE Page 36


Environnement de Développement Intégré Accès aux données

▪ Parmi les méthodes de l’objet DataAdapter


Méthode Description
Remplit un DataSet. Cette méthode a la capacité
Fill
d’ouvrir et de fermer la connexion utilisée.

▪ Plusieurs alternatives existent pour remplir le DataSet :


1. Remplir un DataTable déjà créé dans le DataSet ;
2. Créer et remplir un nouveau DataTable ;
3. Récupérer un certain nombre d’enregistrements;
4. Remplir plusieurs DataTable simultanément.
▪ La structure du DataTable doit correspondre au jeu de
données retournées.
▪ La méthode Fill possède comme paramètres un DataSet et le
nom de la table à remplir.
Mohamed HARRANE Page 37
Environnement de Développement Intégré Accès aux données

Exemple
Dim Ds As New DataSet(″mon_ds″)
Dim Dt As New DataTable(″maTable″)
Dim col1 As New Data.DataColumn(″Code″, GetType(Integer))
Dim col2 As New Data.DataColumn(″libelle″,
GetType(string))
Dt.Columns.Add(col1)
Dt.Columns.Add(col2)
Ds.Tables.Add(Dt)

Dim CN As New OleDbConnection


Cn.ConnectionString = “Provider=Microsoft.ACE.Oledb.12.0;
Data Source = F:\MaBD.accdb”
Dim da As New OleDbDataAdapter (“Select * From Client”,CN)
Da.Fill(Ds,”maTable”)

Mohamed HARRANE Page 38


Environnement de Développement Intégré Accès aux données

▪ Dans ce cas, c’est le DataAdapter qui crée le DataTable ainsi que


sa structure. Le DataTable, passé en paramètre, est un
DataTable inexistant qui sera créé par le DataAdapter.

Exemple
Dim Ds As New DataSet(″mon_Ds″)

Dim CN As New OleDbConnection


CN.ConnectionString =
“Provider=Microsoft.ACE.Oledb.12.0 ;
Data Source = D:\MaBD.accdb”

Dim Da As New OleDbDataAdapter (“Select * From Client”,CN)


Da.Fill(ds,”maTable”)

Mohamed HARRANE Page 39


Environnement de Développement Intégré Accès aux données

Il est possible, lors de l’appel de la méthode Fill, de spécifier


quelles sont les lignes de la requête à récupérer.
Pour cela, on utilise 2 paramètres qui sont l’indice de départ et le
nombre maximal d’enregistrements à récupérer.

Exemple
Dim Da As New OleDbDataAdapter (
“Select * From Etudiant”,cn)
Da.Fill(Ds,35,5,”Mohamed”)

Cet exemple permet de récupérer 5 enregistrements à partir du 35ème


enregistrement.

Mohamed HARRANE Page 40


Environnement de Développement Intégré Accès aux données

▪ Il est également possible de remplir plusieurs DataTable à


partir d’un seul DataAdapter en passant en paramètres
plusieurs requêtes séparées par des points virgule.

Exemple
Dim Da As New OleDbDataAdapter (“Select * From Client;
Select * from Produit;
Select * From Commande”,CN)
Da.Fill(ds,”maTable1”, ”maTable2”, ”maTable3” )
‘Affectation de nouveaux noms aux tables créés
Ds.Tables(0).TableName= ″TClient″
Ds.Tables(1).TableName= ″TProduit″
Ds.Tables(2).TableName= ″TCommande″

Mohamed HARRANE Page 41


Environnement de Développement Intégré Accès aux données

▪ Chaque DataTable contient une collection de DataRow qui


sont les différents enregistrements de la table ;
▪ Plusieurs opérations sont possibles :
1) Parcourir les données ;
2) Insertion de données ;
3) Modification des données ;
4) Suppression des données.

▪ Deux modes de parcours existent :


✓ Parcours linéaire permet d’accéder aux enregistrements
d’une seule table via leur indice selon un accès direct ;
✓ Parcours hiérarchique permet d’utiliser les relations
mises en place entre les tables d’un DataSet.

Mohamed HARRANE Page 42


Environnement de Développement Intégré Accès aux données

Exemple de parcours linéaire :


Dim Texte As String
Dim i as integer
For i = 0 To ds1.Tables(″personne″).Rows.count-1
Texte = Texte &
ds1.Tables(″personne″).Rows(i).Item(″Matricule″)& ″_″
& ds1.Tables(″personne″).Rows(i).Item(″Matricule″) & vbCr
Next
MsgBox(Texte)

-- Ou bien
Dim Texte As String, Dt As DataTable
Dt= ds1.Tables(″personne″)
Dim i as integer
For i = 0 To Dt.Rows.count-1
Texte = Texte & Dt.Rows(i).Item(″Matricule″)& ″-″ &
Dt.Rows(i).Item(″Matricule″) & vbCr
Next
MsgBox(Texte)

Mohamed HARRANE Page 43


Environnement de Développement Intégré Accès aux données

Exemple de parcours hiérarchique :


L’exemple affiche pour chaque catégorie, toutes les personnes correspondantes.

Dim Texte2 As String, Ligne As DataRow, i as integer


Dim DtCat as DataTable
DtCat = ds1.Tables(″categorie″)
For i = 0 To DtCat.Rows.Count-1
Texte2 = Texte2 & DtCat.Rows(i).Item(″LibelleCat″) & vbCr
For each Ligne In
DtCat.Rows(i).GetChildRows(″personnel_cat″)
Texte2 = Texte2 & Ligne.Item(″NomP″) & vbCr
Next
Next
MsgBox(Texte2)

La méthode GetChildRows de l’objet DataRow permet de sélectionner les


enregistrements de la table « Personnel » associes à une catégorie déterminée selon
la relation « personnel_cat »

Mohamed HARRANE Page 44


Environnement de Développement Intégré Accès aux données

▪ Pour insérer un nouvel enregistrement, on doit :


o Créer un objet DataRow à partir du DataTable ;
o Configurer les valeurs des différentes colonnes ;
o Ajouter le DataRow au DataTable.

Exemple
Dim Dr As DataRow =
ds1.Tables(″categorie″).NewRow()
Dr(″Code_Cat″)=″11”
Dr(″Libelle_Cat″)=″Salarié”
ds1.Tables(“categorie”).Rows.Add(Dr)

L’exemple ajoute un enregistrement dans le DataTable « categorie ».

Mohamed HARRANE Page 45


Environnement de Développement Intégré Accès aux données

▪ La modification des données est possible en modifiant la collection


Rows de l’objet DataTable.
▪ La modification se fait en 3 étapes :
1. Appel de la méthode «BeginEdit» sur l’objet DataRow qui permet de
commencer une opération de modification
2. Modification des données
3. Appel de la méthode «EndEdit» pour valider les modifications ou de la
méthode «CancelEdit » pour les annuler.

Exemple
ds1.Tables(″personne″).Rows(0).BeginEdit()
ds1.Tables(″personne″).Rows(0).Item(“NomP”)=”Tahiri”
ds1.Tables(″personne″).Rows(0).EndEdit()

L’exemple permet de modifier le 1er enregistrement de la table « Personne »

Mohamed HARRANE Page 46


Environnement de Développement Intégré Accès aux données

▪ La suppression des données consiste à supprimer des objets


DataRow de l’objet DataTable. Pour cela, on utilise la méthode
« Delete » de l’objet DataRow.

Exemple

ds1.Tables(″personne″).Rows(0).Delete()
L’exemple permet de supprimer le 1er enregistrement de la table « Personne »

Mohamed HARRANE Page 47


Environnement de Développement Intégré Accès aux données

• Un DataView permet d’extraire, filtrer et trier des données issues


d’un DataTable.
• Il est possible de modifier, ajouter, supprimer des données
directement à partir du DataView et les modifications seront
automatiquement retranscrites dans le DataTable lié.

• Parmi les propriétés de cet objet, on cite :


Propriété Description
AllowDelete Autorise la suppression d’enregistrements
AllowEdit Autorise la modification d’enregistrements
AllowNew Autorise l’ajout d’enregistrement
Count Nombre d’enregistrements
Sort Équivalent à order by en SQL

Mohamed HARRANE Page 48


Environnement de Développement Intégré Accès aux données

Parmi les méthodes de cet objet, on cite :


Méthode Description
AddNew Ajoute un enregistrement
Delete Supprime un enregistrement
Retourne l’indice de l’enregistrement correspondant aux paramètres de
Find
recherche par rapport aux champs spécifiés dans l’attribut « sort »
FindRows Retourne un ensemble de DataRow correspondant à la recherche

Crée un DataView à partir du


Exemple DataTable « personnel »
Dim Dv As New DataView
Les enregistrements
dv.Table=ds1.Tables(“personne”)
sont classés par ordre
dv.AllowDelete = False : dv.AllowNew = False
décroissant
dv.AllowEdit = True : dv.Sort = “Nom_P”
Dim indice As Integer
Indice = dv.Find(“Slimani”) Cherche l’enregistrement dont
MsgBox(dv(indice).Item(“Matricule”)) le nom est « Slimani »

Mohamed HARRANE Page 49


Environnement de Développement Intégré Accès aux données

➢ Un DataGridView est une grille avec des lignes et des


colonnes comme un tableur.
➢ Une fois que le DataSet existe, en une seule ligne de code, on
peut l'afficher dans un DataGridView.

➢ La syntaxe est la suivante :


DGV.DataSource = donnees.tables("personne")

Mohamed HARRANE Page 50


Environnement de Développement Intégré Accès aux données

➢ L’exportation des données d’un DataSet vers une BD se fait


également à l’aide d’un objet DataAdapter et d’un objet
CommandBuilder.
➢ La création d’un objet CommandBuilder se fait par instanciation
de l’une des classes :
Fournisseur Classe
OLEDB OleDbCommandBuilder
SQL Server SqlCommandBuilder

➢ La méthode update de l’objet DataAdapter permet d’exporter les


données du dataSet vers la Base de données.
Exemple
Dim Cmdbuilder as new oledbCommandBuilder(da)
Da.update(ds, “personne”)

Mohamed HARRANE Page 51


Environnement de Développement Intégré Accès aux données

Mohamed HARRANE Page 52


Environnement de Développement Intégré Accès aux données

Imports System.Data.SqlClient

Public CN As SqlConnection
Public DS As DataSet

Public Sub Connexion()


CN = New SqlConnection
CN.ConnectionString = "Data source=Nom_Srv; Initial Catalog= Nom_BD;
Integrated Security=True"
Try
CN.Open()
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Syntaxe de la chaîne de connexion :


- Data source : nom du serveur Sql Server
- Initial Catalog : nom de la base de données
- User Id : nom de l’utilisateur déclaré dans Sql Server
- Password : mot de passe de l’utilisateur
Mohamed HARRANE Page 53
Environnement de Développement Intégré Accès aux données

Public Sub Liste_CMatricule()


Dim Ds As New DataSet()
Dim Da As SqlDataAdapter
Da = New SqlDataAdapter("select * from Employe Where
société = ’"& Cmbsociete.valuemember &"’", CN)
Da.Fill(Ds, "Employe")
CmbEmploye.DisplayMember = "Matricule"
CmbEmploye.ValueMember = "Matricule"
CmbEmploye.DataSource = Ds.Tables(0)
End Sub

Public Sub Supprimer_Demande (N As int)


Dim Cmd As New SqlCommand
cmd.Connection = cn
cmd.CommandText = "Delete From demande where N_demande=‘"& N &"'"
cmd.ExecuteNonQuery()
End Sub

Mohamed HARRANE Page 54


Environnement de Développement Intégré Accès aux données

Public Sub Remplir_Cmb_Societe()


Dim Ds As New DataSet() , Da As SqlDataAdapter
Da = New SqlDataAdapter("select * from Societe", CN)
Da.Fill(Ds, "Societe")
CmbSociete.DisplayMember = "Raison_sociale"
CmbSociete.ValueMember = "Id_Ste"
CmbSociete.DataSource = Ds.Tables(0)
End Sub

Dim Cmd As New SqlCommand


Cmd.Connection = CN
Cmd.CommandText = "Select * From Formation Where Titre='" & CmbTitre.Text & "'"
Dim dr As OleDbDataReader = cmd.ExecuteReader
If dr.HasRows = True Then
LblDescription.text=dr("Description")
Else
LblDescription.text=" "
End If

Mohamed HARRANE Page 55


Environnement de Développement Intégré Accès aux données

Public Function Generer_Code() As Integer


Dim Cmd As New SqlCommand
Generer_Code = 1
Cmd.Connection = CN
Cmd.CommandText = "Select max(N_Demande) From Demande"
If Not IsDBNull(Cmd.ExecuteScalar) Then
Generer_Code = Int(Cmd.ExecuteScalar) + 1
End If
End Function

Mohamed HARRANE Page 56

Vous aimerez peut-être aussi