Vous êtes sur la page 1sur 18

Cours : EDI (Visual basic) BTS : 2ème DSI

EDI: Visual Basic NET


ADO.NET

I. Introduction
L’ADO.NET (ActiveX Database Objects.NET ) permet de relié une application à une base de données.
La nouveauté de l’ADO.NET par rapport à son ancêtre l’ADO est la gestion de données dans une
application dans un environnement déconnecté. Ce mode, par rapport au mode connecté classique,
possède plusieurs avantages et inconvénients. Ces deux modes sont utilisables avec les fournisseurs de
base de données.

II. 2 Les bases de données


1) Les fournisseurs de données
Chaque fournisseur de données permet la communication avec un type de base de données au travers d’une
API. Une API (Application Programming Interface) est l’interface qui permet l’accès de logiciel par un
autre. Ces fournisseurs permettent de récupérer et de transférer des modifications entre l’application et une
base de données.
Toutes les classes permettant d’utiliser ces fournisseurs se trouvent dans l’espace de nom « System.Data. »
Sur le Framework 3.5, il existe quatre types de fournisseurs : Sql Server - OLE DB - OBDC - Oracle

2) 2- Description des fournisseur


Fournisseur Description
Les classes de ce fournisseur se trouvent dans l’espace de nom System.Data.SqlClient,
SQL Server chaques noms de ces classes sont préfixés par Sql. SQL Server à accès au serveur sans
utiliser d’autres couches logicielles le rendant plus performant.
Les classes de ce fournisseur se trouvent dans l’espace de nom System.Data.OleDb,
chaques noms de ces classes sont préfixés par OleDb. Ce fournisseur exige
OLE DB l’installation de MDAC (Microsoft Data Access Components). L’avantage de ce
fournisseur est qu’il peut dialoguer avec n’importe quelle base de données le temps que
le pilote OLE DB est installé dessus.
Les classes de ce fournisseur se trouvent dans l’espace de nom System.Data.Obdc,
ODBC chaques noms de ces classes sont préfixés par Obdc. ODBC exige l’installation de
MDAC
Les classes de ce fournisseur se trouvent dans l’espace de nom
Oracle System.Data.OracleClient, chaques noms de ces classes sont préfixés par Oracle. Il
permet simplement de se connecter à une source de données Oracle.

Prof : M.ZOUITNI ~1~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
III. La communication VB .NET – BD
ADO .NET permet de travailler en deux modes :
«Connecté » : le poste client maintient une « connexion » réseau avec le serveur, et lui envoie des requêtes
pour lire ou écrire directement dans la base de données distante.
«Déconnecté » : le poste client effectue une copie locale des données en mémoire, dans un DataSet (groupe
de données). Le DataSet contient des tables qui permettent de copier et d’organiser les données sur le poste
client.
Mode Avantages Inconvénients
Avec un mode connecté, la connexion est L’inconvénient se trouve surtout au niveau
permanente, par conséquent les données sont des ressources. En effet,
toujours à jour. De plus il est facile de voir quels
Mode tous les utilisateurs ont une connexion
sont les utilisateurs connectés et sur quoi ils
Connecté permanente avec le serveur. Même si
travaillent. Enfin, la gestion est simple, il y a l’utilisateur n’y fait rien la connexion
connexion au début de l’application puis gaspille beaucoup de ressource entrainant
déconnexion à la fin.
aussi des problèmes d’accès au réseau.
L’avantage est qu’il est possible de brancher un Les données ne sont pas toujours à jour, ce
nombre important d’utilisateurs sur le même qui peut aussi entrainer des conflits lors
serveur. En effet, ils se connectent le moins des mises à jour. Il faut aussi penser à
Mode
souvent et durant la plus courte durée possible. De prévoir du code pour savoir ce que va faire
Déconnecté
plus, avec cet environnement déconnecté, l’utilisateur en cas de conflits.
l’application gagne en performance par la
disponibilité des ressources pour les connexions.

IV. Mode Connecté:


1) L'objet « Connection » :
L’objet « Connection » permet de se connecter à une base de données (sql server) en donnant le nom du
serveur, de la base, et le nom et le mot de passe d’un utilisateur connu du SGDB.
Dim con As New SqlConnection("database=parcinfo;
server= MOHAMED-PC\SQLEXPRESS; integrated security=true")
Ou
Dim con As New SqlConnection("data source = MOHAMED-PC\SQLEXPRESS; initial
catalog= parcinfo; integrated security =true")

Server (data source): Nom ou adresse réseau du serveur vers lequel est établie la connexion
Database (initial catalog) : Nom de la base sur laquelle doit s’effectuer la connexion.
Integrated Security : Si cette valeur est positionnée sur false alors un nom d’utilisateur et un mot de
passe doivent être fournis dans la chaîne de connexion. Sinon, le compte Windows de l’utilisateur est
utilisé pour l’authentification.
La méthode : con.open() permet d’ouvrir la connexion
La méthode : con.close() permet de fermer la connexion
La propriété : con.State.ToString permet d’afficher l’état de connexion (open ou close).

Prof : M.ZOUITNI ~2~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
2) L'objet Command:
L’objet Command permet d’envoyer à la base de données, des requêtes SQL d’interrogation ou de
modification, avec ou sans paramètres.
Pour chaque provider il y a un objet Command spécifique: SqlCommand, OleDbCommand, mais tous les
objets 'Command' ont la même interface, les mêmes membres.
La propriété CommandType indique comment doit être traité la commande CommandText:
La propriété CommandText permet de définir la commande à exécuter: SELECT UPDATE, INSERT,
DELETE ou exécution d’une procédure stockée.
La méthode ExecuteReader exécute le code SQL de CommandText et retourne un DataReader.
La méthode ExecuteScalar fait de même mais retourne la première colonne de la première ligne.
La méthode ExecuteNoQuery exécute le code SQL de CommandText (UPDATE, INSERT,DELETE ou
un ajout de table) sans retourner de données.

3) Utiliser des Commandes


Une fois la connexion établie, la classe SqlCommand permet d’appeler la méthode CreateCommand qui
permettra l’exécution de commandes SQL. Il existe trois méthodes afin de créer une commande :
Méthodes 1:
Dim cmd As SqlCommand = New SqlCommand()
cmd.Connection = con
com.CommandText = "SELECT * FROM Employe"
La deuxième méthode est l’utilisation d’un constructeur surchargé :
Méthodes 2:
Dim cmd As new SqlCommand("SELECT * FROM Employe",con)
Méthodes 3:
La troisième solution est d’utiliser la méthode CreateCommand de la connexion. Dans ce cas, seule
l’instruction SQL a besoin d’être spécifiée par la suite.
Dim cmd as SqlCommand
cmd = con.CreateCommand
cmd.CommandText = "SELECT * FROM Employe"

a) Insertion ( insert into) des données :


cmd.Connection = con
cmd.CommandType = CommandType.Text
cmd.CommandText = "insert into Employe values ('" & Tnom.Text & "','" &
Tprenom.Text & "')"
cmd.ExecuteNonQuery()

Prof : M.ZOUITNI ~3~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
b) Modification (Update) des données :
cmd.Connection = con
cmd.CommandType = CommandType.Text
cmd.CommandText = "Update Employe Set Nom ='" & Tnom.Text & "',
Prénom= '" & Tprenom.Text & "' where CIN='" & Tcin.Text & "')"
cmd.ExecuteNonQuery

c) Suppression (Delete from) des données :


cmd.Connection = con
cmd.CommandType = CommandType.Text
cmd.CommandText = "Delete from Employe where CIN='" & Tcin.Text & "')"
cmd.ExecuteNonQuery

4) Le SqlDataReader
Le DataReader permet un accès en lecture seule à des enregistrements. Il n’a pas été créé que pour la
lecture pure et simple de données (SELECT). Le DataReader doit toujours être associé à une connexion
active, c'est à dire qu’il ne peut pas se déconnecter, effectuer quelque chose puis se reconnecter pour une
mise à jour.

Exemple 1 : Chercher un enregistrement


Dim cmd As New SqlCommand ("select * from Employe where CIN=" & Text1.Text &
"", con)
Dim dr As SqlDataReader = cmd.ExecuteReader
If dr.Read Then
Text2.Text = dr(1)
Text3.Text = dr(2)
Else
MsgBox("Code introuvable!!", MsgBoxStyle.Exclamation)
End If
dr.Close()

Exemple 2 :Remplir un combobox


cmd.CommandType = CommandType.Text
cmd.CommandText = " select * from Nom de table "
Dim dr As SqlDataReader = cmd.ExecuteReader
While dr.Read
Combobox.Items.Add(dr(0))
End While
dr.Close()

Prof : M.ZOUITNI ~4~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
Exemple 3 :Remplir un Listbox
Dim cmd As New SqlCommand("select colone2 , colone 3 from Table where colone1=" &Combobox.Text
& "", con)
Dim dr As SqlDataReader = cmd.ExecuteReader
ListBox1.Items.Clear()
If dr.Read Then
ListBox1.Items.Add("Le nom est :" & dr(1) & "")
ListBox1.Items.Add("Le prenom est :" & dr(2) & "")
End If
dr.Close()

5) ExecutesScalar
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 minimum)
MAX (valeur maximum)
SUM (somme).
Exemple:
Dim cmd As New SqlCommand("select count(*) from Nom_de_table ", con)
Text.text = cmd.ExecuteScalar()

Prof : M.ZOUITNI ~5~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
V. Mode déconnecté:

1) Introduction
Dans un mode non connecté, la liaison avec le serveur de base de données n’est pas permanente. Il faut donc
conserver localement les données sur lesquelles on souhaite travailler. L’idée est de recréer, à l’aide de
différentes classes, une organisation similaire à celle d’une base de données.

2) L'objet « Connection » : (même que dans le mode connecté)


3) Le DataSet
Le DataSet est une représentation de données résident en mémoire qui propose un modèle de
programmation relationnel cohérent indépendant de la source de données. Le DataSet représente un jeu de
données complet, comprenant des tables, des contraintes et des relations entre les tables. Étant donné que
le DataSet est indépendant de la source de données, il peut inclure des données locales par rapport à
l'application ainsi que des données provenant de plusieurs sources. L'interaction avec les sources de
données existantes est contrôlée par le DataAdapter.

a) La création d’un DataSet : Dim ds as New DataSet( )


b) Propriétés importantes de l’objet DataSet
Relations : Obtient la collection des relations qui relient des tables et permettent de naviguer entre des
tables parentes aux tables enfants.
Tables : Obtient la collection des tables contenues dans DataSet.

c) Méthodes importantes de l’objet DataSet


AcceptChanges : Valide toutes les modifications apportées à ce DataSet depuis son chargement ou depuis
le dernier appel à AcceptChanges.
GetChanges : permet de ne récupérer que les enregistrements modifiés.

Prof : M.ZOUITNI ~6~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
4) Objet DataTable
L’objet DataTable correspond à une table.
Propriété Description
Columns Collection des colonnes de la table
Constraints Collection des contraintes de la table
Rows Collection des lignes de la table

a) Crée un objet DataTable


L’exemple suivant crée un objet DataTable en spécifiant ces paramètres et le lie au DataSet

Dim ds As New DataSet()


Dim dt As New DataTable("personne")
ds.Tables.Add(dt)
b) Objet DataRow
Afin d’ajouter des données dans une DataTable, il faut tout d’abord créer un nouveau DataRow. Après
avoir créé votre ligne, vous pouvez y ajouter vos valeurs.
Dim ligne As DataRow
ligne = ds.Tables("personne").NewRow
ligne(0) =TextBox1.Text
ligne(1) =TextBox2.Text
ligne(2) =TextBox3.Text
ds.Tables("personne").Rows.Add(ligne)

c) Objet DataColumn
Les objets DataColumn correspondent aux différentes colonnes d’une table. En créant une colonne, vous
devez spécifier plusieurs informations :
 Le nom de la colonne
 Le type de la colonne
 Les propriétés de la colonne

L’exemple suivant ajoute des champs à la table « personne » en utilisant les différentes propriétés et
spécifie la clé primaire :

Dim col1 As New Data.DataColumn("pers_num", GetType(Integer))


col1.AutoIncrement = True
col1.AutoIncrementSeed = 1
col1.AutoIncrementStep = 1
ds.Tables("personne").Columns.Add(col1)
ds.Tables("personne").PrimaryKey = New DataColumn() col1}
Dim col2 As New Data.DataColumn("pers_nom", GetType(String))

Prof : M.ZOUITNI ~7~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
col2.Unique = True
col2.MaxLength = 255
col2.DefaultValue = "inconnu"
ds.Tables("personne").Columns.Add(col2)

5) Objet DataRelation
Un DataSet est une représentation en objets d’une base de données. Un des points fondamental des bases de
données est la mise en place de relation permettant ensuite de vérifier la cohérence des données saisies dans
plusieurs tables.
La création d’une relation se fait par rapport à un DataSet en créant un objet DataRelation et en spécifiant
les champs des tables qui sont liés. Une relation concerne deux champs. Lors de la création de la relation,
vous devez spécifier son nom, le champ « clé primaire » et le champ « clé étrangère ».
L’exemple suivant crée les tables « personne » et « categorie » et met en place une relation entre les deux :
Dim rel As New DataRelation ("pers_cat",ds.Tables("personne").Columns("pers_num"),
ds.Tables("categorie ").Columns("pers_num"))
ds.Relations.Add(rel)

6) Objet DataAdapter
Les Objets DataSet et DataTable permettent de définir la structure des données au sein d’une application
comme mode temporaire de stockage.
L’objet DataAdapter est un connecteur entre la source de données et l’objet DataSet. L’intérêt d’un tel
composant est de pouvoir dissocier la zone de stockage des données (Une BDR par exemple) de la zone de
travail (Le DataSet).
Son utilisation se fait en plusieurs étapes :

a) Création
Lors de la création d’un DataAdapter, il est nécessaire de spécifier la connexion utilisée ainsi que la requête
Select.
Dim da As New sqlDataAdapter("select * from Produits", con)

b) Importer des données


L’importation des données consiste à remplir les DataTable d’une DataSet à partir d’un DataAdapter
défini.

c) Remplir un DataSet
Le remplissage des éléments d’un DataSet se fait à l’aide de la méthode Fill de l’objet DataAdapter.
Plusieurs configurations sont possibles pour la récupération des données en raison de la surcharge de la
méthode Fill :

Prof : M.ZOUITNI ~8~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
Quelque soit la surcharge utilisée, la méthode Fill a la capacité d’ouvrir et de fermer la connexion
utilisée pour la création du DataAdapter. Attention, si vous accéder à plusieurs des tables via un
DataAdapter, il est préférable d’ouvrir et fermer vous-même la connexion.
'definition dataset et datatable
Dim ds As New DataSet()
'remplissage datatable à partir du DataAdapter
Dim da As New sqlDataAdapter("select * from Personnes", con)
da.Fill(ds, "matable") // ou bien : da.Fill(ds, "Personnes")

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 virgules.
Attention, lors de la création des DataTable, la méthode Fill les nomme « Table1 », Table2 … Il est donc
vivement conseillé de renommer les tables après exécution.

'remplissage datatable à partir du DataAdapter


Dim da As New sqlDataAdapter("select * from Client ; Select * from Produit ", con)
da.Fill(ds, "matable")
ds.Tables(1).TableName = “Client”
ds.Tables(2).TableName = “Produit”

d) Déclencher la mise à jour des données


La propriété SelectCommand du DataAdapter est un objet Command qui extrait les données de la source de
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.
Pour déclencher la mise à jour des données, il suffit d’appeler la méthode Update de l’objet
DataAdapter en passant en paramètre le DataSet ainsi que le nom de la table du DataSet à valider.

da.Update(ds, "Client")
ds.Tables("Client").AcceptChanges()

7) La classe SqlCommandBuilder
SqlDataAdapter ne génère pas automatiquement les instructions Transact-SQL requises pour
l'harmonisation des modifications apportées à DataSet avec l'instance associée de SQL Server. Cependant,
vous pouvez créer un objet SqlCommandBuilder pour générer automatiquement des instructions Transact-
SQL pour des mises à jour de table simple si vous définissez la propriété SelectCommand de
SqlDataAdapter.
Déclaration classe SqlCommandBuilder
Dim cmd As SqlCommandBuilder
Création objet un SqlCommandBuilder
cmd = New SqlCommandBuilder(da)

Prof : M.ZOUITNI ~9~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
8) Objet DataView
L’objet DataView permet d’extraire, filtrer et trier des données issues d’un DataTable. De plus, il
est possible de modifier, ajouter, supprimer des données directement à partir du DataView et les
modifications seront automatiquement retranscrites dans le DataTable lié. Un DataView peut être vu
comme une vue au niveau base de données.
Propriété Description
AllowDelete Autorise la suppression d’enregistrements
AllowEdit Autorise la modification d’enregistrements
AllowNew Autorise l’ajout d’enregistrements
Count Nombre d’enregistrement
RowFilter Définit un filtre pour les données : chaîne de texte équivalente à la clause
« where » d’une requête SQL
Sort Définit le tri : Equivalant à la clause « order by » d’une requête SQL

Méthode Description
Addnew Ajoute un enregistrement
Delete Supprime un enregistrement
Find Retourne l’indice de l’enregistrement correspondant aux paramètres de
recherche par rapport au champ spécifié dans l’attribut « sort »
FindRows Retourne un ensemble de lignes (DataRow) correspondant à la recherche.

Dim dv as new DataView


dv.Table = ds.Tables("personne")
dv.RowFilter = "nom like '" + Textfiltre.Text + "%'" //filter
dv.Sort = "nom desc" //trier par nom décroissant :
DataGridView1.DataSource = dv // mettre vue dans la grille

Prof : M.ZOUITNI ~ 10 ~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
VI. Exemple d’application en mode déconnecté :
En n’utilisant que les requêtes SQL pour ajouter, modifier, supprimer et chercher.

create database
personne;
use personne

create table personne


(
code int primary key,
nom varchar(30),
prenom varchar(30),
classe varchar(30)
);
insert into personne
values (1,'hadou',
'lahcen','BTS'),
(2,'hachmi',
'abde','SRI'),
(3,'seadani',
'fahd','ESA');

select * from personne

' les déclaration globale des classes


Imports System.Data.SqlClient
Imports System.Data
Public Class Form1
Public con As New SqlConnection("database=personne ; server=localhost\SQLEXPRESS ; integrated
security=true")
Public da As SqlDataAdapter
Public ds As New DataSet
Public cmd As SqlCommandBuilder
Public n, c As Integer
-----------------------------------------------------------------------------------------------
'Procédure charger() permet remplire datagrid par la table "personne" et le combobox par les codes
(item(0))
Sub charger()
ds.Clear() ' effacer les tables dans datasaet
DataGridView1.Update() 'mettre a jour la grille
ComboBox1.Items.Clear() 'vider item du combobox
ComboBox1.Text = Nothing 'effacer le texte combobox
TextBox1.Text = Nothing 'effacer la zone de texte textbox1
TextBox2.Text = Nothing
TextBox3.Text = Nothing
TextBox4.Text = Nothing
'remplir la selection du SqldataApadter dans la nouvelle table "personne" du DATASET
da = New SqlDataAdapter("select * from personne", con)
da.Fill(ds, "personne")
' remplir tous les indices du combobox par les codes (item (0) ) de la table "personne"
Dim pos As Integer
While pos <= ds.Tables("personne").Rows.Count - 1
ComboBox1.Items.Add(ds.Tables("personne").Rows(pos).Item(0))
pos = pos + 1
End While
'remplir la grille par la table "personne" du DataSet
DataGridView1.DataSource = ds.Tables("personne")

Prof : M.ZOUITNI ~ 11 ~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
End Sub
-------------------------------------------------------------------------------

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


'appel de la proccédure charger
charger()

End Sub
--------------------------------------------------------------------------------------
Private Sub Ajouter_Click(sender As Object, e As EventArgs) Handles Ajouter.Click

Try ' gestion des erreurs


'clé primaire de la table "personne" ne doit pas avoir meme valeur donc on doit faire un test
'du numéro saisi dans TextBox1.Text avec le code qui se trouve dans la table "personne"
Dim pos, num As Integer ' variable pos c'est pour parcourir les enregistrements de la table
num = -1 'affecte -1 a cette variable
While pos <= ds.Tables("personne").Rows.Count - 1
If (CInt(TextBox1.Text) = ds.Tables("personne").Rows(pos).Item(0)) Then
num = 1 'si le numéro dans TextBox1 = au code de la table "personne" num=1
End If
pos = pos + 1 'incrémenter pos pour passer à la ligne suivante de la table "personne"
End While

If num = -1 Then 'si le numéro dans TextBox1 # au code de la table "personne" num=-1

‘insertion des données dans la table "personne" de la base de donnée


da = New SqlDataAdapter("insert into personne values('" & Me.TextBox1.Text & "', '" &
Me.TextBox2.Text & "', '" & Me.TextBox3.Text & "', '" & Me.TextBox4.Text & "')", con)
cmd = New SqlCommandBuilder(da)
da.Fill(ds, "personne")

' mise à jours des données de la source de données au DataSet


da.Update(ds, "personne")
ds.Tables("personne").AcceptChanges()
MsgBox("Bien Ajouter!", MsgBoxStyle.Information)

' appel a cette procédure pour recharger grille et combobox


charger()
Else
MsgBox("personne déja existe")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
----------------------------------------------------------------------------------------------
Private Sub chercher_Click(sender As Object, e As EventArgs) Handles chercher.Click

Dim col As DataRow 'déclarrer variable de type ligne

'requette pour sélectionner la ligne de la table "pesonne" du code qui se trouve dans ComboBox1.Text
da = New SqlDataAdapter("select * from personne where code='" & ComboBox1.Text & "'", con)
da.Fill(ds, "recherche") 'mettre cette sélection dans une nouvelle table "recherche" du DataSet

'metter la seule ligne cherchée (Rows(0)) dans la variable "col"


col = ds.Tables("recherche").Rows(0)
TextBox1.Text = col(0) 'mettre la premiere colonne dans TextBox1
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)

Prof : M.ZOUITNI ~ 12 ~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI

DataGridView1.MultiSelect = False 'ne fait pas plusieurs sélections dans la grille

' selcetioner la ligne cherchée qu'a le code se trouve dans"TextBox1"


DataGridView1.Rows(CInt(TextBox1.Text) - 1).Selected = True

'effacer la ligne cherchée


col.Table.Clear()
End Sub
--------------------------------------------------------------------------------------
Private Sub Supprimer_Click(sender As Object, e As EventArgs) Handles Supprimer.Click

'message de confiramtion de suppresion


Dim rep = MsgBox("voulez-vous supprimer cette personne ?", MsgBoxStyle.OkCancel, "confirmation")
If rep = vbOK Then
da = New SqlDataAdapter("delete from personne where Code = " & TextBox1.Text & "", con)
cmd = New SqlCommandBuilder(da)
da.Fill(ds, "personne")

da.Update(ds, "personne")
ds.Tables("personne").GetChanges()
MsgBox("Bien Supprimer !!", MsgBoxStyle.Information)
charger()
End If
End Sub
----------------------------------------------------------------------------------------
Private Sub Modifier_Click(sender As Object, e As EventArgs) Handles Modifier.Click

da = New SqlDataAdapter("update personne set nom='" & Me.TextBox2.Text & "', prenom='" &
Me.TextBox3.Text & "', classe='" & Me.TextBox3.Text & "' where code= " & Me.TextBox1.Text & "", con)
cmd = New SqlCommandBuilder(da)
da.Fill(ds, "personne")

da.Update(ds, "personne")
ds.Tables("personne").AcceptChanges()
MsgBox("Bien Modifier!!", MsgBoxStyle.Information)
charger()
End Sub
--------------------------------------------------------------------------------------------
Private Sub Textfiltre_TextChanged(sender As Object, e As EventArgs) Handles Textfiltre.TextChanged
'pour utiliser le filtre on doit appeler DataView qui facile cette opération
Dim dv As New DataView
dv.Table = ds.Tables("personne") 'mettre la table "personne" dans dv

'filter par le champ "nom" de la vue "dv" avec du texte saisi dans Textfiltre et % indique n'importe
caractère
dv.RowFilter = "nom like '" + Textfiltre.Text + "%'"

'trier une colonne par appel à la propriété "sort" du DataView; desc: pour décroissant
dv.Sort = "nom desc"

'mettre dans la grille le filtre


DataGridView1.DataSource = dv
End Sub
-----------------------------------------------------------------------------------
Private Sub DataGridView1_MouseClick(sender As Object, e As MouseEventArgs) Handles
DataGridView1.MouseClick

'lors du clique sur une ligne du DtaGrid les données seront placées dans les zonnes de textes
Dim i As Integer = DataGridView1.CurrentRow.Index ' indique le numéro de la ligne sélectionée

Prof : M.ZOUITNI ~ 13 ~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI

TextBox1.Text = DataGridView1.Rows(i).Cells(0).Value.ToString
TextBox2.Text = DataGridView1.Rows(i).Cells(1).Value.ToString
TextBox3.Text = DataGridView1.Rows(i).Cells(2).Value.ToString
TextBox4.Text = DataGridView1.Rows(i).Cells(3).Value.ToString
End Sub
---------------------------------------------------------------------------------------
Private Sub BDEBUT_Click(sender As Object, e As EventArgs) Handles BDEBUT.Click

'mettre la première ligne (Rows(0)) dans la variable "col" de type DataRow


Dim col As DataRow
col = ds.Tables("personne").Rows(0)
TextBox1.Text = col(0)
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)
n = 0
End Sub

---------------------------------------------------------------------------------------
Private Sub BFIN_Click(sender As Object, e As EventArgs) Handles BFIN.Click

Dim col As DataRow


c = ds.Tables("personne").Rows.Count - 1 'la variable c contient le nombre de ligne dans la table
col = ds.Tables("personne").Rows(c) 'mettre la dernière ligne (Rows(c)) dans la variable "col"
TextBox1.Text = col(0)
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)
n = c
End Sub
-----------------------------------------------------------------------------------------
Private Sub Bprecedent_Click(sender As Object, e As EventArgs) Handles Bprecedent.Click
Dim col As DataRow
If n > 0 Then
n = n - 1
col = ds.Tables("personne").Rows(n)
TextBox1.Text = col(0)
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)
End If
End Sub
--------------------------------------------------------------------------------------
Private Sub BSuivant_Click(sender As Object, e As EventArgs) Handles BSuivant.Click
Dim col As DataRow
If n < c Then
n = n + 1
col = ds.Tables("personne").Rows(n)
TextBox1.Text = col(0)
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)
End If
End Sub

End Class

Prof : M.ZOUITNI ~ 14 ~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
VII. Exemple d’application en mode déconnecté :
En n’utilisant que les propriétés et méthodes de l’objet Dataset
pour ajouter, modifier, supprimer et chercher.

create database
personne;
use personne

create table personne


(
code int primary key,
nom varchar(30),
prenom varchar(30),
classe varchar(30)
);
insert into personne
values (1,'hadou',
'lahcen','BTS'),
(2,'hachmi',
'abde','SRI'),
(3,'seadani',
'fahd','ESA');

select * from personne

' les déclaration globale des classes


Imports System.Data.SqlClient
Imports System.Data
Public Class Form1
Public con As New SqlConnection("database=personne ; server=localhost\SQLEXPRESS ; integrated
security=true")
' Public con As New OleDb.OleDbConnection("provider=Microsoft.jet.oledb.4.0; data
source=mabase.mdb")
Public da, dar As SqlDataAdapter
Public ds As New DataSet
Public dr As DataRow
Public cmd As SqlCommandBuilder
Public n, c As Integer

Sub chargerdataset()
ds.Clear()
'remplir la selection du SqldataApadter dans la nouvelle table "personne" du DATASET
da = New SqlDataAdapter("select * from personne", con)
da.Fill(ds, "personne")
End Sub

'Procédure charger() permet remplire datagrid par la table "personne" et le combobox par les
codes (item(0))
Sub charger()
Dim dt As New DataTable
' effacer les tables dans datasaet
dt.Clear()
DataGridView1.Update() 'mettre a jour la grille
ComboBox1.Items.Clear() 'vider item du combobox
ComboBox1.Text = Nothing 'effacer le texte combobox
TextBox1.Text = Nothing 'effacer la zone de texte textbox1
TextBox2.Text = Nothing
TextBox3.Text = Nothing
TextBox4.Text = Nothing

dt = ds.Tables("personne")

Prof : M.ZOUITNI ~ 15 ~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
' remplir tous les indices du combobox par les codes (item (0) ) de la table "personne"
Dim pos As Integer
pos = 0
While pos <= dt.Rows.Count - 1
ComboBox1.Items.Add(dt.Rows(pos).Item(0))
pos = pos + 1
End While
'remplir la grille par la table "personne" du DataSet
DataGridView1.DataSource = ds.Tables("personne")
End Sub

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles


MyBase.Load

'appel de la proccédure charger ET chargerdataset


chargerdataset()
charger()

End Sub
Private Sub Ajouter_Click(sender As Object, e As EventArgs) Handles Ajouter.Click

Try ' gestion des erreurs


'clé primaire de la table "personne" ne doit pas avoir meme valeur donc on doit faire un test
'du numéro saisi dans TextBox1.Text avec le code qui se trouve dans la table "personne"
Dim pos, num As Integer ' variable pos c'est pour parcourir les enregistrements
de la table
num = -1 'affecte -1 a cette variable
While pos <= ds.Tables("personne").Rows.Count - 1
If (CInt(TextBox1.Text) = ds.Tables("personne").Rows(pos).Item(0)) Then
num = 1 'si le numéro dans TextBox1 = au code de la table "personne" num=1
End If
pos = pos + 1 'incrémenter pos pour passer à la ligne suivante de la table "personne"
End While

If num = -1 Then 'si le numéro dans TextBox1 # au code de la table "personne" num=-1
' insertion des données dans la table "personne" du Dataset
dr = ds.Tables("personne").NewRow
dr(0) = TextBox1.Text
dr(1) = TextBox2.Text
dr(2) = TextBox3.Text
dr(3) = TextBox4.Text
ds.Tables("personne").Rows.Add(dr)

cmd = New SqlCommandBuilder(da) 'création et exécution du commandbuilder pour


mettre à jour le DataAdapter
da.Update(ds, "personne") 'mise à jour des données du DataAdapter à partir
du commandbuilder

MsgBox("Bien Ajouter!", MsgBoxStyle.Information)


' appel a cette procédure pour recharger grille et combobox
charger()
Else
MsgBox("personne déja existe")
End If
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub

Private Sub Supprimer_Click(sender As Object, e As EventArgs) Handles Supprimer.Click


'message de confiramtion de suppresion
Dim rep = MsgBox("voulez vous vraiment supprimer cette personne ?", MsgBoxStyle.OkCancel,
"confirmation")
If rep = vbOK Then

Prof : M.ZOUITNI ~ 16 ~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
'il faut définir clé primaire de la table "personne" dans Dataset
ds.Tables("personne").PrimaryKey = New DataColumn() {ds.Tables("personne").Columns("code")}

'la méthode find permet de chercher dans la colonne du clé primaire


' ensuite on appel la méthode delete() pour supprimer la ligne
ds.Tables("personne").Rows.Find(TextBox1.Text).Delete()

cmd = New SqlCommandBuilder(da)


da.Update(ds, "personne")

MsgBox("Bien Supprimer !!", MsgBoxStyle.Information)

charger()
End If
End Sub

Private Sub Modifier_Click(sender As Object, e As EventArgs) Handles Modifier.Click

'il faut définir clé primaire de la table "personne" dans Dataset


ds.Tables("personne").PrimaryKey = New DataColumn() {ds.Tables("personne").Columns("code")}

'la méthode find permet de chercher dans la colonne du clé primaire

dr = ds.Tables("personne").Rows.Find(TextBox1.Text)
dr.BeginEdit()
dr(1) = TextBox2.Text
dr(2) = TextBox3.Text
dr(3) = TextBox4.Text
dr.EndEdit()

cmd = New SqlCommandBuilder(da)


da.Update(ds, "personne")

MsgBox("Bien Modifier!!", MsgBoxStyle.Information)

charger()

End Sub
Private Sub chercher_Click(sender As Object, e As EventArgs) Handles chercher.Click

'pour utiliser le filtre on doit appeler DataView qui facilite cette opération
Dim dv As New DataView
dv.Table = ds.Tables("personne") 'mettre la table "personne" dans dv

dv.Sort = "code" 'tri code en ascendant


Dim i As Integer = dv.Find(ComboBox1.Text) 'chercher dans le champ "code" qu'est trié
TextBox1.Text = dv(i).Item(0) ' ou dv(i).Item("code")
TextBox2.Text = dv(i).Item(1)
TextBox3.Text = dv(i).Item(2)
TextBox4.Text = dv(i).Item(3)

End Sub
Private Sub Textfiltre_TextChanged(sender As Object, e As EventArgs) Handles
Textfiltre.TextChanged
'pour utiliser le filtre on doit appeler DataView qui facile cette opération
Dim dv As New DataView
dv.Table = ds.Tables("personne") 'mettre la table "personne" dans dv
'filter par le champ "nom" de la vue "dv" avec du texte saisi dans Textfiltre et % indique
n'importe caractère
dv.RowFilter = "nom like '" + Textfiltre.Text + "%'"

'trier une colonne par appel à la propriété "sort" du DataView; desc: pour décroissant
dv.Sort = "nom desc"
'mettre dans la grille le filtre
DataGridView1.DataSource = dv

End Sub
Private Sub DataGridView1_MouseClick(sender As Object, e As MouseEventArgs) Handles
DataGridView1.MouseClick

Prof : M.ZOUITNI ~ 17 ~ 2015/2016


Cours : EDI (Visual basic) BTS : 2ème DSI
'lors du clique sur une ligne du DtaGrid les données seront placées dans les zonnes de textes
Dim i As Integer = DataGridView1.CurrentRow.Index ' indique le numéro de la ligne sélectionée

TextBox1.Text = DataGridView1.Rows(i).Cells(0).Value.ToString
TextBox2.Text = DataGridView1.Rows(i).Cells(1).Value.ToString
TextBox3.Text = DataGridView1.Rows(i).Cells(2).Value.ToString
TextBox4.Text = DataGridView1.Rows(i).Cells(3).Value.ToString
End Sub

Private Sub BDEBUT_Click(sender As Object, e As EventArgs) Handles BDEBUT.Click


'mettre la première ligne (Rows(0)) dans la variable "col" de type DataRow
Dim col As DataRow
col = ds.Tables("personne").Rows(0)
TextBox1.Text = col(0)
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)
n = 0
End Sub
Private Sub BFIN_Click(sender As Object, e As EventArgs) Handles BFIN.Click
Dim col As DataRow
c = ds.Tables("personne").Rows.Count - 1 'la variable c contient le nombre de ligne dans
la table
col = ds.Tables("personne").Rows(c) 'mettre la dernière ligne (Rows(c)) dans la variable
"col"
TextBox1.Text = col(0)
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)
n = c
End Sub

Private Sub Bprecedent_Click(sender As Object, e As EventArgs) Handles Bprecedent.Click


Dim col As DataRow
If n > 0 Then
n = n - 1
col = ds.Tables("personne").Rows(n)
TextBox1.Text = col(0)
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)

End If
End Sub

Private Sub BSuivant_Click(sender As Object, e As EventArgs) Handles BSuivant.Click


Dim col As DataRow
If n < c Then
n = n + 1
col = ds.Tables("personne").Rows(n)
TextBox1.Text = col(0)
TextBox2.Text = col(1)
TextBox3.Text = col(2)
TextBox4.Text = col(3)
End If

End Sub

End Class

Prof : M.ZOUITNI ~ 18 ~ 2015/2016

Vous aimerez peut-être aussi