Vous êtes sur la page 1sur 17

M22 : Programmation C/S

ADO.Net
Formateur : Driouch Bouazza
Etablissement : OFPPT/CFMOTI
18/02/2010 V1.5
http://www.driouchb.0fees.net/

DRIOUCH B. www.cfmoti.0fees.net 1

Plan
 Définition (Gé
(Généralité
ralité, Architecture N-tier)
tier)
 Framework .Net / ADO.Net
 Connexion à une BD (Connection
(Connection))
 Mode Connecté
Connecté (Commad,
Commad, DataReader)
DataReader)
 Mode DéDéconnecté
connecté (DataSet,
DataSet, DataAdapter)
DataAdapter)
 Mode DéDéconnecté
connecté (DataTable,
DataTable, Relation)
 Contrôle utilisateur
 Utilisation Procé
Procédure Stocker et Transaction
 DataSet Typé
Typé
 Édition des états (CrystalReport
(CrystalReport))
 Déploiement
DRIOUCH B. www.cfmoti.0fees.net 2

Pré
Présentation
 De nombreuses applications fonctionnent selon un
environnement client/serveur, cela signifie que des machines
clientes contactent un serveur,
serveur, une machine gé généralement trè
très
puissante en terme de capacité
capacités d'entré
d'entrée-sortie, qui leur fournit
des services.
services. Ces services sont des programmes fournissant des
donné
données telles que l'heure, des fichiers, une connexion,…
connexion,…
 Les services sont exploité
exploités par des programmes, appelé appelés
programmes clients,
clients, s'exé
s'exécutant sur les machines clientes. On
parle ainsi de client FTP, client de messagerie, ..., lorsque l'on
désigne un programme, tournant sur une machine cliente,
capable de traiter des informations qu'il ré récupè
cupère auprè
auprès du
serveur (dans le cas du client FTP il s'agit de fichiers, tandis que
pour le client messagerie il s'agit de courrier électronique).
DRIOUCH B. www.cfmoti.0fees.net 3
Avantages / Inconvé
Inconvénients
 Le modè
modèle client/serveur est particuliè
particulièrement
recommandé
recommandé pour des ré réseaux né
nécessitant un grand
niveau de fiabilité
fiabilité, ses principaux atouts sont:
• des ressources centralisé
centralisées
• une meilleure sé
sécurité
curité
• une administration au niveau serveur
• un ré
réseau évolutif
 L'architecture client/serveur a tout de même quelques
lacunes parmi lesquelles:
• un coû
coût élevé
levé
• une maillon faible
DRIOUCH B. www.cfmoti.0fees.net 4

Fonctionnement
 Un systè
système client/serveur fonctionne selon le
sché
schéma suivant:

 Le client émet une requête vers le serveur


grâce à son adresse et le port,
port, qui dé
désigne un
service particulier du serveur
 Le serveur reç
reçoit la demande et ré
répond à l'aide
de l'adresse de la machine client et son port
DRIOUCH B. www.cfmoti.0fees.net 5

Architecture à 2 et 3 niveaux

L'architecture à deux niveaux


caracté
caractérise les systè
systèmes
clients/serveurs dans lesquels le
client demande une ressource et le
serveur la lui fournit directement.

Dans l'architecture à 3 niveaux (appelé


(appelées architecture 3-3-
tier),
tier), il existe un niveau intermé
intermédiaire, c'est-
c'est-à-dire que l'on
a gé
généralement une architecture partagé
partagée entre:
• Le client: le demandeur de ressources
• Le serveur d'application (appelé
(appelé aussi middleware):
middleware):
le serveur chargé
chargé de fournir la ressource mais faisant
appel à un autre serveur
• Le serveur secondaire (gé (généralement un serveur de
base de donné
données), fournissant un service au premier
serveur
DRIOUCH B. www.cfmoti.0fees.net 6
Architecture multi-
multi-niveaux
Dans l'architecture à 3
niveaux, chaque serveur
(niveaux 1 et 2) effectue une
tâche (un service) spé
spécialisé
cialisée.
Ainsi, un serveur peut utiliser
les services d'un ou plusieurs
autres serveurs afin de fournir
son propre service. Par
consé
conséquence, l'architecture à
trois niveaux est
potentiellement une
architecture à N niveaux...
DRIOUCH B. www.cfmoti.0fees.net 7

Framework Dotnet
 .NET est une plate forme complè
complète pour dé
développer, dé
déployer et exé
exécuter
des applications Web, Windows, Mobiles et serveur. La plate forme
forme repose
sur la notion de framework qui est un cadre de travail offrant des outils et
spé
spécifications né
nécessaires pour dé
développer et dé
déployer des applications.

 Le Framework .NET est conç


conçu pour remplir les objectifs suivants :
• Fournir un environnement cohécohérent de programmation orienté
orientée objet que le
code objet soit stocké
stocké et exé
exécuté
cuté localement, exé
exécuté
cuté localement mais distribué
distribué
sur Internet ou exé
exécuté
cuté à distance.
• Fournir un environnement d'exé
d'exécution de code qui minimise le dédéploiement de
logiciels.
• Fournir au dé
développeur un environnement cohé
cohérent entre une grande varié
variété de
types d'applications comme les applications Windows et les applications
applications Web.
• Générer toutes les communications à partir des normes d'industries pour
s'assurer que le code basé
basé sur le Framework .NET peut s'inté
s'intégrer à n'importe
quel autre code.

DRIOUCH B. www.cfmoti.0fees.net 8

Composants de .Net
 Le CLR (Common
(Common language Runtime)
Runtime) : il repré
représente la machine virtuelle
de la plate forme (un peu comme la JVM pour java). Il est responsable
responsable de
l’exé
exécution des applications et gè
gère tous les aspects de sé
sécurité
curité : le garbage
Collector,
Collector, la gestion des événements etc.
 Un ensemble de librairie de classes : situé
située au dessus de la CLR, cette
rubrique offre une couche pour la gestion des donné
données. On y retrouve les
Windows Forms (WinForms),
WinForms), ensemble de classes permettant la
conception d’
d’IHM pour Windows (un peu comme AWT ou Swing).
 Adonet (Data and xml):
xml): une nouvelle gé
génération de composants d'accè
d'accès aux
bases de donné
données
 Nous avons ASP.NET qui fournit un ensemble de classe pour la conception
conception
de site dynamique, la crécréation d’
d’IHM pour le web, les WebForms et la
conception de services web.
 Au sommet de la pile nous avons les langages supporté
supportés par .NET tels C#,
VB.NET, C++, J# qui sont des produits de Microsoft et d’ d’autres tels que
Cobol, Delphi, etc…
etc… ; .NET offre ainsi un choix de langage contrairement
à son concurrent J2EE.
DRIOUCH B. www.cfmoti.0fees.net 9
Composants de .Net

DRIOUCH B. www.cfmoti.0fees.net 10

ADO.Net
 Que nous apporte ADO .NET ?
 Une architecture plus optimisé
optimisée: Avec .Net, de nouveaux
fournisseurs de donné
données voient le jour. Par exemple le .NET
Framework comprend le fournisseur de donné données SQL Server
.NET en mode natif via le namespace System.Data.SqlClient.
 Un meilleur support du mode dé déconnecté
connecté : Aujourd'hui
Microsoft encourage le mode dé déconnecté
connecté et propose des
classes spé
spécialisé
cialisées supportant les deux modes : connecté
connecté (via
l'objet DataReader)
DataReader) et dé
déconnecté
connecté (via l'objet DataSet).
DataSet).
 Un meilleur support de XML : Le XML est utilisé utilisé au sein du
Framework .NET comme le standard de description et de
persistance des donné
données.

DRIOUCH B. www.cfmoti.0fees.net 11

Choix d'un fournisseur de


donné
données .NET
 Pour pouvoir faire appel aux classes proposé
proposées par ADO .Net il est
nécessaire d'inclure une ré
référence à l'espace de noms correspondant. Vous
pouvez soit inclure l'espace System.Data soit inclure des classes de cet
espace comme System.Data.OleDb ou System.Data.SqlClient ; tout dé dépend
de la source de donné
données utilisé
utilisée.
'Inclusion d'un namespace
imports System.Data
Imports System.Data.SqlClient

DRIOUCH B. www.cfmoti.0fees.net 12
Le modè
modèle objet ADO .NET

DRIOUCH B. www.cfmoti.0fees.net 13

Le modè
modèle objet ADO .NET
 Regardons de plus prè
près chacun de ces objets.

DRIOUCH B. www.cfmoti.0fees.net 14

Connexion à une base de donné


données
 Modes de connexion
L’évolutions
’évolutions d’d’ADO.Net est plus importante du coté coté mode
déconnecté
connecté afin de soulager d'une part le serveur BD et d'autre
part d'é
d'é pargner la bande passante, Le mode "dé
"d connecté" permet
é connecté
au client d'effectuer des fonctions telles que le tri, le filtrage,
filtrage, sans
avoir recours au serveur, grâce à une copie locale des donné
données.
L'avantage du mode "dé "déconnecté
connecté" sur le mode "connecté
"connecté" est
évident, ce dernier utilisant une connexion permanente avec la
base de donné
données.

Ce qui nous permet d’


d’avoir deux modes de connexion (Mode
connecté
connecté et Mode dé
déconnecté
connecté)
DRIOUCH B. www.cfmoti.0fees.net 15
Cré
Création de la connexion
 Pour dé
déplacer des donné
données entre une base de donné
données et votre application,
vous devez disposer d’ d’une connexion pré
préalable à la base de donné
données. Pour
cré
créer une connexion à une base de donnédonnées, vous devez identifier le nom du
serveur de base de donné
données, le nom de la base de donné
données et les informations
de connexion requises.
 En fonction du type de base de donné données à laquelle vous accé
accédez, vous
pouvez utiliser un objet SqlConnection ou OleDbConnection.
OleDbConnection. Utilisez un
objet SqlConnection pour la connexion aux bases de donné données SQL Server
version 7.0 ou ulté
ultérieure et un objet OleDbConnection pour la connexion à
toutes les autres bases de donné
données.
 Pour cré
cré er un objet SqlConnection,
SqlConnection, passez une chaî
chaîne de connexion qui
fournit les paramè
paramètres requis pour cré
créer une connexion à une source de
donné
données.

Dim strConn As String = ‘’data


‘’data source=localhost
source=localhost ; initial catalog=
catalog=GestStg ;
integrated security=true’’
security=true’’
Dim conn As New SqlConnection(strConn)
SqlConnection(strConn )

DRIOUCH B. www.cfmoti.0fees.net 16

Cré
Création de la connexion
 Paramè
Paramètres de la chaî
chaîne de connexion

DRIOUCH B. www.cfmoti.0fees.net 17

Accè
Accès aux donné
données en mode
connecté
connecté
 L’objet Command
Une fois la connexion vers une base de donné données effectué
effectuée, vous
pouvez exé
exécuter une requête et ré
récupé
cupérer son ré
résultat en utilisant
l'objet Command. La cré cré ation d'un objet Command né
nécessite
l'instanciation d'un objet SqlCommand.
SqlCommand. Cet objet expose
diffé
différentes mé
méthodes Execute à utiliser selon le ré
résultat attendu :

 La mé
méthode ExecuteReader peut être utilisé
utilisée pour ré
récupé
cupérer un
jeu d'enregistrements et retourne un objet DataReader.
DataReader.
 La mé
méthode ExecuteScalar récupè
cupère une valeur unitaire.
 La méméthode ExecuteNonQuery exé exécute une commande ne
retournant pas de lignes.

DRIOUCH B. www.cfmoti.0fees.net 18
Exemple (Command)
Imports System
Imports System.Data.SqlClient
Public Class CommandeSQL
Public Shared Sub Main()
Dim strConnexion As String = "Data Source=localhost
Source=localhost;; Integrated
Security=SSPI; Initial Catalog=
Catalog=GestStg"
GestStg"
Dim strRequete As String = "INSERT INTO Module VALUES
(‘ADO.Net',3)"
Try
Dim oConnection As New SqlConnection(strConnexion)
SqlConnection(strConnexion)
Dim oCommand As New SqlCommand(strRequete,
SqlCommand(strRequete, oConnection)
oConnection)
oConnection.Open()
oConnection.Open()
oCommand.ExecuteNonQuery()
oCommand.ExecuteNonQuery()
oConnection.Close()
oConnection.Close()
Catch e As Exception
Console.WriteLine(("L'erreur suivante a été rencontré
rencontrée :" + e.Message))
e.Message))
End Try
Console.readline()
Console.readline()
End Sub 'Main
End Class 'CommandeSQL
'CommandeSQL
DRIOUCH B. www.cfmoti.0fees.net 19

Mode connecté
connecté
 l’objet DataReader
L'objet DataReader permet de ré récupé
cupérer d'une source de donné
données
un flux en lecture seule en avant seulement (read
(read only,
only, forward
only).
only). Il ré
résulte de l'exé
l'exécution de la mé
méthode ExecuteReader
sur un objet Command.
L'objet DataReader ne stocke en mé mémoire qu'une seule ligne à la
fois, permettant ainsi d'augmenter les performances d'une
application et d'en ré
réduire la charge.
 Il est recommandé
recommandé d'utiliser cet objet si :
• Vous n'avez pas besoin de ré
réaliser un cache des donné
données
• Vous traitez un jeu d'enregistrements trop important pour être stock
stockéé en
mémoire
• Vous souhaitez accé
accéder à des donné
données rapidement en lecture seule en
avant seulement

DRIOUCH B. www.cfmoti.0fees.net 20

Mode connecté
connecté
 Par dédéfaut, un DataReader charge une ligne entiè entière en
mémoire à chaque appel de la mé méthode Read.
Read. Il est possible
d'accé
d'accéder aux valeurs de colonnes soit par leurs noms soit par
leurs ré
références ordinales. Une solution plus performante est
proposé
proposée permettant d'accé
d'accéder aux valeurs dans leurs types de
donné
données natifs (GetInt32, GetDouble,
GetDouble, GetString)
GetString) Par exemple
si la premiè
première colonne de la ligne indicé
indicée par 0 est de type int,
int,
alors il est possible de la rérécupé
cupérer à l'aide de la méméthode
GetInt32 de l'objet DataReader.
DataReader.
 La méméthode Close ferme un objet DataReader.
DataReader. Pré
Précisons que
si l'objet Command utilisé
utilisé contient des paramè
paramètres en sortie ou
des valeurs de retours, ils ne pourront être ré récupé
cupérés qu'a
l'issue de la fermeture du DataReader.
DataReader.
DRIOUCH B. www.cfmoti.0fees.net 21
Exemple (DataReader
(DataReader))
'Cré
'Création de la connexion et de l’l’objet Command
Dim conn As New SqlConnection("data source=localhost\
source=localhost\SQLExpress ;
integrated security=true ; initial catalog=GestStg")
Dim cmdStg As New SqlCommand("select * from Stagiaire", conn)
conn.Open()
'Cré
'Création d’
d’un DataReader et affichage des donné
données
Dim dr As SqlDataReader
dr = cmdStg.ExecuteReader()
Do While dr.Read()
Console.WriteLine(dr("nom") & " - " & dr("moyenne"))
Loop
'Fermeture de DataReader et de la connexion
dr.Close()
conn.Close()
Console.ReadLine()

DRIOUCH B. www.cfmoti.0fees.net 22

Gestion des erreurs


 Lors de l’
l’utilisation de connexions avec l’l’objet DataReader,
DataReader, vous devriez
toujours utiliser une instruction Try…
Try…catch…
catch…Finally pour garantir la
fermeture des connexions en cas d’é
d’échec
chec quelconque. Sinon, la connexion
peut demeurer indé
indéfiniment ouverte.
 Le code suivant d’ d’un objet DataReader intercepte des erreurs et ferme la
connexion
Try
Conn.Open()
Conn.Open()
Dr = cmdStg.executeReader()
cmdStg.executeReader()
‘utilisation des donné
données retourné
retournées dans les dataReader
Catch e As Exception
‘Gestion de l’l’erreur
Finally
Dr.close()
Dr.close()
Conn.close()
Conn.close()
End Try

DRIOUCH B. www.cfmoti.0fees.net 23

Exercice
Réaliser une application avec le sché
schéma relationnel suivant
 Stagiaire (IdStg
(IdStg,, nomp,
nomp, moyenne)
 Module (IdMod
(IdMod,, Libelle, Coeff)
Coeff)
 Note (IdStg
(IdStg,, IdMod,
IdMod, Note)
Et la conception de fenêtre suivant (listeView
(listeView,, ComboBox)
ComboBox)
Page Accueille
Menu

Liste Stagiaire Liste Module


Supprimer Supprimer

Liste Note/Module
Modifier Ajouter Modifier Ajouter
Supprimer

Ajouter Modifier
DRIOUCH B. www.cfmoti.0fees.net 24
Mode Dé
Déconnecté
connecté
 DataSet:
DataSet:
L’objet DataSet repré
représente une copie locale des donné
données provenant d’ d’au
moins une source de donné données. L’
L’objet DataSet peut utiliser un objet
DataAdapter pour charger des donné
données à partir d’
d’une source de donné
données et
peut se dé déconnecter ensuite de cette derniè
dernière. L’
L’utilisateur peut ensuite
utiliser et manipuler les donné
données. Lorsque les donné
données doivent être mises à
jour dans la source de donné
données, un objet DataAdapter est utilisé
utilisé pour se
reconnecter à la source de donné
données et la mettre à jour.

DRIOUCH B. www.cfmoti.0fees.net 25

DataSet
 La collection "DataTableCollection
"DataTableCollection""
Cette collection peut contenir de zézéro à n objets de type DataTable.
DataTable. Chaque
objet DataTable repréreprésente une table d'une source de donné données. Chaque
DataTable est constitué
constituée d'une collection Columns et d'une collection Rows
qui peuvent contenir respectivement de zé zéro à n objets DataRow et
DataColumn.
DataColumn.
 La collection "DataRelationCollection
"DataRelationCollection""
Cette collection peut contenir de zé zéro à n objets de type DataRelation.
DataRelation. Un
objet DataRelation définit une relation parent-
parent-enfant entre deux tables à
partir des valeurs des clé
clés étrangè
trangères.
 La collection "ExtendedProperties
"ExtendedProperties""
Cette collection correspond à un objet de type PropertyCollection qui peut
contenir de zé zéro à n proprié
propriétés dé
définies par un utilisateur. Cette collection
peut être utilisé
utilisée afin de stocker des informations personnalisé
personnalisées lié
liées au
DataSet utilisé
utilisé (date et heure de gé
génération des donné
données, ordre select passé
passé
pour gé
générer les donné
données.).

DRIOUCH B. www.cfmoti.0fees.net 26

DataAdapter
 Un objet DataSet doit être capable d'interagir avec une ou plusieurs sources de
donné
données. Pour ré
réaliser cette action le framework Microsoft .Net fournit un objet
nommé
nommé DataAdapter.
DataAdapter. L'objet DataAdapter sert de liaison entre un objet
DataSet et une source de donnédonnées. Un fournisseur de donné
données .NET va se
servir d'un objet DataAdapter pour remplir de donné données un DataSet puis
répercuter les modifications ré réalisé
alisées sur une source de donné
données. Il est
possible de dé
définir les actions à r éaliser par le DataAdapter en utilisant l'une
des quatre proprié
propriétés suivantes. Chaque proprié
propriété exé
exécutera soit un ordre SQL
soit une procé
procédure stocké
stockée.

DRIOUCH B. www.cfmoti.0fees.net 27
DataTable (AutoIncrement)
AutoIncrement)
Dim MaTable As new DataTable
‘Ajout de colonne
Dim MaColonne As New DataColumn("id",
DataColumn("id", "System.int
"System.int")
")
With MaColonne
.Unique = True
.AutoIncrement = True
.AllowDBNull = False
.ReadOnly = True
End With
MaTable.Columns.Add(
MaTable.Columns.Add(MaColonne)
MaColonne)
MaColonne = New DataColumn("nom",
DataColumn("nom", "System.string
"System.string")
")
MaTable.Columns.Add(
MaTable.Columns.Add(MaColonne)
MaColonne)
‘Ajout de ligne
Dim MaLigne As DataRow
MaLigne = MaTable.NewRow
MaLigne("nom")
MaLigne("nom") = " Ali"
MaTable.Rows.Add(
MaTable.Rows.Add(MaLigne)
MaLigne)

DRIOUCH B. www.cfmoti.0fees.net 28

DataRelation
- Définition d’
d’une clé
clé primaire:
MonData.tables("Stagiaire").
MonData.tables("Stagiaire").PrimaryKey
PrimaryKey=
=
New DataColumn(){
DataColumn(){MonData.tables
MonData.tables("Stagiaire")
("Stagiaire")..Columns("IndexNom")}
Columns("IndexNom")}

- En suppose que MonData est une dataSet avec les trois table de la base
GestSTG
Dim rel As DataRelation
rel = New DataRelation("
DataRelation("stgNote
stgNote",
", MonData.Tables("Stagiaire").
MonData.Tables("Stagiaire").Columns
Columns("
("idstg
idstg"),
"),
MonData.Tables("Note").
MonData.Tables("Note").Columns
Columns("("idstg
idstg"))
"))
MonData.Relations.Add(
MonData.Relations.Add(rel)
rel)
rel = New DataRelation("
DataRelation("modNote
modNote",", MonData.Tables("Module").
MonData.Tables("Module").Columns
Columns("
("idmod
idmod"),
"),
MonData.Tables("Note").
MonData.Tables("Note").Columns
Columns("("idmod
idmod"))
"))
MonData.Relations.Add(
MonData.Relations.Add(rel)
rel)

- Utilisation d’
d’une relation :
Dim LignesEnfants(),
LignesEnfants(), LigneVisé
LigneVisée As DataRow
Dim rel As DataRelation = MonData.Tables("stagiaire").
MonData.Tables("stagiaire").ChildRelations
ChildRelations("
("StgNote
StgNote")
")
LigneVisé
LigneVisée = MonData.Tables("stagiaire").
MonData.Tables("stagiaire").Rows
Rows((stg.CurrentCell.RowNumber)
stg.CurrentCell.RowNumber)
LignesEnfants = LigneVisé
LigneVisée.GetChildRows(
e.GetChildRows(rel)
rel)

DRIOUCH B. www.cfmoti.0fees.net 29

Remplissage d'un DataSet


 La mé
méthode Fill de l'objet DataAdapter permet d'extraire les donné
données d'une
source de donné
données en exé
exécutant la requête SQL spé
spécifié
cifiée dans la proprié
propriété
SelectCommand.
SelectCommand. Elle prend en paramè
paramètre le DataSet et le nom du DataTable
à remplir avec les donné
données retourné
retournées.
' Cré
Création d'un objet SqlDataAdapter
Dim oSqlDataAdapter As New SqlDataAdapter("select * from Stagiaire",
Stagiaire", oConnection)
oConnection)
Dim oDataSet As New DataSet(“
DataSet(“Stagiaire")
Stagiaire")
oSqlDataAdapter.Fill(oDataSet,
oSqlDataAdapter.Fill(oDataSet, " Stagiaire")
Stagiaire")
La mise à jour de donné
données avec un DataAdapter et un DataSet :
La mé
méthode Update de l'objet DataAdapter permet de ré répercuter sur une
source de donné
données les modifications effectué
effectuées dans un DataSet.
DataSet. Cette
méthode admet un objet DataSet qui contient les donné données modifié
modifiées et un
objet DataTable optionnel qui contient les modifications à extraire.
oSqlDataAdapter.Update(
oSqlDataAdapter.Update(oDataSet)
oDataSet)
En ré
réalité
alité, lorsque la mé
méthode Update est invoqué
invoquée l'objet DataAdapter
analyse les modifications effectué
effectuées au niveau de la collection DataRow.
DataRow. En
fonction des modifications rencontré
rencontrées, les commandes InsertCommand,
InsertCommand,
UpdateCommand et DeleteCommand sont appelé appelées par l'objet DataAdapter.
DataAdapter.
DRIOUCH B. www.cfmoti.0fees.net 30
Cré
Création d’
d’un DataSet
Pour cré
créer une copie locale d’
d’une base de donné
données, cré
créez et remplissez un
objet DataSet au moyen d’ d’objets DataTable.
DataTable. Pour cré
créer un objet DataSet,
DataSet,
vous devez d’
d’abord dé
déclarer le nom de l’
l’objet DataSet.
DataSet. Le code suivant cré
crée
un objet DataSet nommé
nommé ds : Dim ds As New DataSet()
DataSet()

Remplissage du DataSet
Aprè
Après avoir cré
crée un objet DataSet,
DataSet, remplissez les objets DataTable en cré créant
un objet DataAdapter.
DataAdapter. Vous pouvez appeler la mé méthode Fill de l’ l’objet
DataAdapter,
DataAdapter, puis prépréciser l’
l’objet DataTable à remplir. Le code suivant
remplit la table Authors (Auteurs) de l’ l’objet DataSet intitulé
intitulé ds en utilisant un
DataAdapter nommé
nommé da : da.Fill(
da.Fill(ds,
ds,’’Stagiaire
’’Stagiaire’’
’’))

Accè
Accès à un DataTable
chaque objet DataSet se compose d’
d’au moins un objet DataTable que vous
pouvez ré
référencer par nom ou par position ordinale :
ds.Tables(
ds.Tables(‘’Authors
‘’Authors’’
’’))
-Ou-
Ou-
ds.Tables(0)
ds.Tables(0)
DRIOUCH B. www.cfmoti.0fees.net 31

CommandBuilder
 Après remplissage d’un DataSet avec DataAdapter en utilisant l’objet SelectCommand, on peut
utiliser les donnée pour les traitements de MAJ (Ajouter, Modifier et supprimer), et a la fin des
différent traitements il faut faire appelle une 2eme fois le DataAdapter pour répercuter les
modification du DataSet sur la base de donnée source, qui fait appel au trois autre objet
(InsertCommand, UpdateCommand et DeleteCommand) selon l’etat(ligne Ajouter, Modifier ou
supprimer) de chaque ligne du DataTable utilisé
 Pour effectuer cet opération, il faut construire les trois objets (InsertCommand, UpdateCommand et
DeleteCommand), la difficulté de leur construction nous fait appel a un autre objet CommandBuilder
qui permet leur construction a partir de SelectCommand

 Utilisation de CommandBuilder
Dim StgCon As New SqlConnection("Data source=.\SQLExpress; integrated security=true;initial
catalog=GestStg")
Dim StgDA As New SqlDataAdapter("", StgCon)
Dim StgDS As New DataSet
Dim StgCB As SqlCommandBuilder
StgDA.SelectCommand = New SqlCommand("Select idstg,nom,moyenne from stagiaire", StgCon)
StgDA.Fill(StgDS, "stg")
‘Modification des donnée dans le DataSet
StgCB = New SqlCommandBuilder(StgDA)
StgDA.Update(StgDS.Tables("stg"))

DRIOUCH B. www.cfmoti.0fees.net 32

DataRow et DataColumn
Utiliser un objet DataRow et ses proprié
propriétés et méméthodes pour extraire et
évaluer les valeurs d’ d’un objet DataTable.
DataTable. Le DataRowCollection repréreprésente les
objets DataRow réels pré présents dans l’ l’objet DataColumn qui dé décrivent le
sché
schéma de l’ l’objet DataTable.
DataTable. La proprié
propriété Rows de l’ l’objet DataTable fournit
un accè
accès par programmation au DataRowCollection.
DataRowCollection. La proprié
propriété Columns de
l’objet DataTable fournit un accè
accès par programmation au
DataColumnCollection.
DataColumnCollection.
Dim col As DataColumn
For Each col In ds.Tables(0).Columns
LstItems.Items.Add(col.ColumnName)
LstItems.Items.Add(col.ColumnName)
Next
le nombre de lignes ou de colonnes d’ d’un objet DataTable:
DataTable:
ds.Tables(‘’
ds.Tables(‘’Authors
Authors’’
’’).Rows.Count
).Rows.Count
ds.Tables(‘’
ds.Tables(‘’Authors
Authors’’
’’).Columns.count
).Columns.count
accé
accéder à ces champs par position ordinale (de base 0) Ou par nom :
DataSet.Tables(0).Rows
DataSet.Tables(0). Rows(x)(1)
(x)(1)
DataSet.Tables(0).Rows
DataSet.Tables(0).Rows(x)( (x)(‘’
‘’nom_champ
nom_champ’’ ’’))
DRIOUCH B. www.cfmoti.0fees.net 33
Try
Gestion Erreur
Dim conn As New SqlConnection(
SqlConnection(…)
Dim da As New SqlDataAdapter(
SqlDataAdapter(…, conn)
conn)
Dim ds As New DataSet()
DataSet()
Da.Fill(ds)
Da.Fill(ds)
Catch ex1 As System.Data.sqlClient.sqlException
Select Case ex1.Number
Case 17
LblErrors.Text = lblErrors.Text & (‘’
(‘’nom
nom de serveur non valide’’
valide’’))
Case 156, 170 ‘syntaxe SQL incorrecte
LblErrors.Text = lblErrors.Text & (‘syntaxe incorrecte’’
incorrecte’’))
Case 207 ‘nom de champ incorrect dans select
LblErrors.Text = lblErrors.Text & (‘’
(‘’nom
nom de colonne non valide’’
valide’’))
Case 208 ‘nom de table incorrect dans select
LblErrors.Text = lblErrors.Text & (‘’
(‘’nom
nom d’
d’objet non valide’’
valide’’))
Case 18452
LblErrors.Text = lblErrors.Text & (‘’nom
‘’nom de l’
l’utilisateur non valide’’
valide’’))
Case 18456
LblErrors.Text = lblErrors.Text & (‘mot de passe non valide’’
valide’’))
Case 4060
LblErrors.Text = lblErrors.Text & (‘‘base
‘‘base de donné
données non valide’’
valide’’))
End Select
Catch ex2 As System.Exception
LblErrors.Text = lblErrors.Text & (‘’
(‘’Exception
Exception inattendue : ‘’ & ex2.Message & ‘’ , ‘’)
‘’)
End Try
DRIOUCH B. www.cfmoti.0fees.net 34

Gestion Erreur
L’exemple suivant montre comment parcourir la collection
Errors pour rechercher les dé
détails sur les erreurs SQLServer
survenues :

Dim erData As SqlClient.SqlErrorCollection = ex1.Errors


Dim i As Integer
for i = 0 To erData.Count-
erData.Count-1
lbErrors.Text &= (‘’
(‘’Erreur
Erreur ‘’ & i & ‘’ : ‘’ & _
erData(i).Number & ‘’ , ‘’ & _
erData(i).Class & ‘’ , ‘’ & _
erData(i).Message & ‘’’’
Next i

DRIOUCH B. www.cfmoti.0fees.net 35

Exercice
Quel est le ré
résultat du code suivant :
Dim r As DataRow
Dim str As String
For Each r in ds.Tables(‘’
ds.Tables(‘’Stagiaire
Stagiaire’’
’’).Rows
).Rows
Str &=r(1)
Str &=r(‘’
&=r(‘’nom
nom’’
’’))
Next

Dim dt as DataTable=
DataTable=ds.Tables(‘’
ds.Tables(‘’Stagiaire
Stagiaire’’
’’))
CBmtr.ValueMember = "idstg
"idstg""
CBmtr.DisplayMember = "nom
"nom""
CBmtr.DataSource = dt
Reproduire la Sé
Série M22 N1 en mode dé
déconnecté
connecté.
DRIOUCH B. www.cfmoti.0fees.net 36
Contrôle Utilisateur(Composant)
 En programmation, le terme composant est généralement utilisé
pour désigner un objet qui est réutilisable et qui peut interagir avec
d'autres objets.
 Un composant doit définir des propriétés à la place de champs
publics, car les concepteurs visuels, tels que Visual Studio .NET,
affichent des propriétés et non des champs dans la fenêtre de
propriétés.
 Les propriétés sont comme des champs intelligents. Une propriété
possède généralement une donnée membre privée accompagnée de
fonctions d'accesseur et est accédée du point de vue syntaxique
comme un champ d'une classe
 Voire Atelier UserControle (Horloge) sur la partie téléchargement
du site http://www.driouchb.0fees.net

DRIOUCH B. www.cfmoti.0fees.net 37

Atelier UserContrôle
1- étape lancer VB.net et créer un projet de type "application Windows "

et l'enregistrer sous le nom MonPremierControle Le VB.net crée un formulaire qui va


servir pour tester notre Horloge
2- ajouter un contrôle utilisateur vide

Lui affecter le nom Horloge.vb


Question : quelle est la différence entre les deux classes Form1 et Horloge?
3- créer notre Horloge.
On a besoin de deux contrôles minimum, oui c'est ça un label et un Timer. Ajoutons les
alors. Après nous modifions les propriétés du Timer pour qu'il rafraîchir l'heure chaque
seconde, donc il faut choisir comme intervalle 1000ms (millet seconde) et enabled à
true.
est ce que c'est suffisant? Non, il faut l'activer pour que l'événement Tick se déclenche
chaque intervalle (ici 1000).
Je rappelle que l'événement tick se déclenche chaque 1000 seconde. Donc, ajouter une
méthode et l'associer à l'événement tick (vous double cliquez sur le contrôle Timer)
Ajouter le code suivant: Label1.text="il est : " & Date.now

DRIOUCH B. www.cfmoti.0fees.net 38

Atelier UserContrôle
 4- tester le contrôle.

Pour tester le contrôle, vous devez compiler le projet, et il va créer sur la boite
d'outils votre contrôle Horloge que vous pouvez insérer ensuite dans le formulaire
'Form1'
Afficher le formulaire Form1 et regarder dans la palette des contrôles, est ce que
vous voyez votre contrôle

Ajouter la dans votre formulaire et exécuter le (optionnel).

DRIOUCH B. www.cfmoti.0fees.net 39
Inté
Intégrer les Transactions
 Les transactions sont des groupes d'opérations combinées en unités de travail
logiques. Elles sont utilisées pour contrôler et conserver la cohérence et
l'intégrité de chaque action d'une transaction, malgré les éventuelles erreurs
rencontrées sur le système.
 Avec un SGBDR qui prend en charge la gestion des transactions vous pouvez
créer des transactions explicites à l'aide d'instructions SQL BEGIN
TRANSACTION, COMMIT TRANSACTION ou ROLLBACK TRANSACTION
 Pour effectuer une transaction :
1. Appelez la méthode BeginTransaction de l'objet SqlConnection pour marquer
le début de la transaction. La méthode BeginTransaction retourne une
référence à la transaction.
2. Assignez l'objet Transaction à la propriété Transaction du SqlCommand à
exécuter. Si une commande est exécutée sur une connexion sur laquelle une
transaction est active et si l'objet Transaction n'a pas été affecté à la
propriété Transaction de l'objet Command, une exception est levée.
3. Exécutez les commandes requises.
4. Appelez la méthode Commit de l'objet SqlTransaction pour terminer la
transaction, ou la méthode Rollback pour l'annuler. Si la connexion est fermée
ou libérée avant que l'une des méthodes Commit ou Rollback ait été
exécutée, la transaction est annulée.
DRIOUCH B. www.cfmoti.0fees.net 40

Inté
Intégrer les Transactions (Exp)
Exp)
Dim connection As SqlConnection = New SqlConnection(connectString)
connection.Open()
' Début d’une transaction local.
Dim sqlTran As SqlTransaction = connection.BeginTransaction()
' liaison du command avec la transaction courante.
Dim command As SqlCommand = connection.CreateCommand()
command.Transaction = sqlTran
Try
command.CommandText = "INSERT INTO Stagiaire(Nom) VALUES('Ali')"
command.ExecuteNonQuery()
command.CommandText = "INSERT INTO Stagiaire(Nom) VALUES('Ahmed')"
command.ExecuteNonQuery()
sqlTran.Commit()
Console.WriteLine("Les deux enregistrement sont inscrit dans la base de donnée")
Catch ex As Exception
Console.WriteLine(ex.Message)
Console.WriteLine("Auqu’une enregistrement n’est inscrit.")
sqlTran.Rollback()
End Try

NB: Pour une utilisation avancé des transaction, cherche l’utilisation des
transaction distribué avec l’API dans le name space System.Transaction

DRIOUCH B. www.cfmoti.0fees.net 41

Exécution Procédure Stocké


 Puisque l’utilisation des procédures stocké avec les SGBDR est profitable avec la centralisation de tous le
code SQL au niveau du SGBD, il faut pas négligé leur utilisation dans une application client serveur
(ADO.Net), les mêmes objets pour exécuter une instruction SQL sont réutilisé pour l’exécution d’une
procédure stocké, en plus d’un objet Parameter pour définir explicitement les paramètres à une PS
 Exp:soit AffNote une procédure qui affiche la liste des notes d’un stagiaire donnée ne paramètre
Dim conn As New SqlConnection("data source=.\SQLExpress;initial catalog=GestStg; integrated security=true")
Dim cmd As New SqlCommand("AffNote", conn)
cmd.CommandType = CommandType.StoredProcedure
' Création d'un paramètre en entrée
Dim oParam As SqlParameter = cmd.Parameters.Add("@idstg", SqlDbType.Int, 32, "idstg")
oParam.Value = "1"
conn.Open()
Dim dr As SqlDataReader = cmd.ExecuteReader
While dr.Read
Console.WriteLine("{0} : " & ControlChars.Tab & "{1}", dr("libelle"), dr("note"))
End While
dr.Close()
conn.Close()
Console.Write("Presse une touche ....")
Console.ReadKey()
DRIOUCH B. www.cfmoti.0fees.net 42
les sché
schémas XSD (DataSet
(DataSet typé
typé)
Le DataSet est en fait un fichier XML qui définit les différentes tables qui
composeront les sources de donnée de votre travail (ComboBox, DataGrid,
CrystalReport…). Ce qui évite tout problème lié au changement de connexion
a la base de donné.

Pour ça en ajoute un nouveau élément


dans le projet de type DataSet (ext
xsd), après en ajoute des tables via une
connexion dans l’explorateur de serveur,
ou bien, en ajoute un nouveau
DataAdapter avec une requête SQL
spécifique et une chaîne de connexion,
un DataTable s’ajoute automatiquement,
avec un assistant qui permet de créer
les autres objets du DataAdapter
(InsertCommand, DeleteCommand,
UpdateCommande)

DRIOUCH B. www.cfmoti.0fees.net 43

États (CrystalReports
(CrystalReports))
Dans toute application en a besoin de rapport de sortie imprimable,
imprimable, soit des rapports
de listing, de calcule ou de graphe.
Pour ça en ajoute un nouveau élément de type CrystalReport (ext rpt), rpt), dans
l’explorateur des champs en peut tous paramé
paramétrétré, champs de base de donné
donnée, champs
de formule, champs de paramè
paramètre, champs de nom de groupe, champs de total cumulé cumulé
et autre.
Exemple : pour avoir un état de tous les stagiaires avec leur notes et matiè matière, en
commence par paramé
paramétré
tré le champs base de donné
donnée avec le DataSet typé
typé, en paramè
paramètre
le champs de nom de groupe pour spé spécifié
cifié le regroupement par id_stg et en glisse les
éléments dont en a besoin sur le CrystalReport,
CrystalReport, pour affiché
affiché ce rapport, il faut utilisé
utilisé un
CrystalReportViewer dans une Forms et ajouté ajouté le code suivant au dé démarrage de la
Forms:
Forms:
Imports GestionSTG.DSetTableAdapters
Dim DS As New DSet ‘ instanciation du dataSet
Dim DAstg As New stagiaireTableAdapter
Dim DAmat As New matiereTableAdapter
Dim DAnot As New noteTableAdapter
Dim etatn As New EtatNote
DAstg.Fill(DS.stagiaire) ‘ remplisssage des Datatables dans le DataSet
DAmat.Fill(DS.matiere)
DAnot.Fill(DS.note)
etatn.SetDataSource(DS) ‘ lien entre CR et DataSet
CrystalReportViewer1.ReportSource = etatn ‘ lien entre CRViewer et CR

DRIOUCH B. www.cfmoti.0fees.net 44

États (CrystalReports
(CrystalReports))
 Pour afficher un seule relevé pour un
seule stagiaire, il faut travailler le
champs de paramètre pour créer un
paramètre. Donnez lui un nom et un
type
 Click droit dans un emplacement vide
dans le rapport pour affiche l’Expert
Sélection, après le chois de l’élément
cliquez sur OK pour précisé l’égalité
entre l’élément sélectionné et le
paramètre créer

DRIOUCH B. www.cfmoti.0fees.net 45
États (CrystalReports
(CrystalReports))
 Et pour le programme, il faut faire les changement suivant pour
prendre en considération le paramètre:

Imports GestionSTG.DSetTableAdapters
Dim DSet1 As New DSet
Dim MatiereTableAdapter1 As New matiereTableAdapter
Dim StagiaireTableAdapter1 As New stagiaireTableAdapter
Dim NoteTableAdapter1 As New noteTableAdapter
Dim releve As New ReleveSTG
‘Démarrage de la fenêtre avec CrystalReportViewer
Me.MatiereTableAdapter1.Fill(DSet1.matiere)
Me.StagiaireTableAdapter1.Fill(DSet1.stagiaire)
Me.NoteTableAdapter1.Fill(DSet1.note)
Me.releve.SetDataSource(DSet1)
releve.SetParameterValue("idstg", idstg) ‘idstg: valeur du paramètre
Me.CrystalReportViewer1.ReportSource = releve

DRIOUCH B. www.cfmoti.0fees.net 46

États (CrystalReports
(CrystalReports))
Finalement en peut
accompagné notre rapport
par un diagramme
(Histogramme)
Click droit-> Insertion…
Exmp: Note par Module
dans relevé Stagiaire.

DRIOUCH B. www.cfmoti.0fees.net 47

Déploiement (Install)
 Il y as plusieurs méthode de publication( publication
normal, avec projet de déploiement, autres outils
externes…)
 Dans la page de propriété de votre projet il y as une partie
Publier qu’il faut configuré avant le lancement de votre
publication

• Emplacement du dossier de publication : dossier de sortie


• Fichiers d’application: ajouter les fichier de ressource de votre
application (base de donnée, image, Icon, ficher text, …)
• Composants requis: composant utilisé dans votre application
(rendre les outils utilisé comme CrystalReport, SQLExpress, …)
installable à partir de votre application
• Mise a Jour: l’application cherche la MAJ ou non(si oui indiqué
le lien Web)
• Options : autres information

DRIOUCH B. www.cfmoti.0fees.net 48
DRIOUCH B. www.cfmoti.0fees.net 49