Documente Academic
Documente Profesional
Documente Cultură
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:
Architecture à 2 et 3 niveaux
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.
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
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
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
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 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 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 :
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 "
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
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
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
DRIOUCH B. www.cfmoti.0fees.net 48
DRIOUCH B. www.cfmoti.0fees.net 49