Calculateurs Temps Réel
Programmation Evenementielle en
C#
Université Libre de Sfax
2012/2013ULS
Yessine HADJ KACEM
Calculateurs Temps RéelPlan
• Introduction à .NET
• Le langage C #
• Programmation événementielle et visuelle avec C#
2012/2013ULS 2
• Programmation événementielle et visuelle avec C#
• Accès aux bases de données
• Programmation Réseau
Calculateurs Temps RéelIntroduction à .NET
Le langage C #Programmation événementielle et visuelle avec C#
Accès aux bases de donnéesProgrammation Réseau
• " .NET" : plate-forme de génération de logiciels distribués et coopérants, les services Web XML.
• Le Framework .NET : un modèle de programmation unifié
• Prise en considération des différents types de
2012/2013ULS
• Prise en considération des différents types de clients (Web-HTML, Windows, PocketPC) et serveurs
• Multi langages avec des langages supporté par Microsoft (VB.NET, C#, C++, J#) et par ses partenaires
3
Calculateurs Temps Réel
Règle de transcodage :
langage source ����
MSIL
Portabilité au niveau des langages
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
2012/2013ULS4
Librairie (orientée objets) de services et d’interfaces utilisateurs.
" Machine virtuelle "
Calculateurs Temps Réel
• CLS : passage d’un langage de programmation vers
le langage intermédiaire MSIL
• FCL: collection de classes implémentant les
services de base de .NET et fonctionnant sur tous
les OS)
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
2012/2013ULS
les OS)
• CLR: chargement du code MSIL et convertion en
code machine adapté au support
����portabilité au niveau du fichier exécutable :
indépendance vis à vis du système d’exploitation
Calculateurs Temps Réel
• Orientation objet prononcée : tout doit être incorp oré
dans des classes
• Types précisément conformes à l'architecture .NET e t
vérifications de type plus élaborées,
• Libération automatique des objets (garbage collecti on)
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS
• Libération automatique des objets (garbage collecti on)
• Disparition du passage d'argument par adresse au
profit du passage par référence,
• Passage de tableaux en arguments ainsi que renvoi d e
tableau considérablement simplifié
6
Calculateurs Temps Réel
• Disparition de l'héritage multiple mais possibilité pour
une classe d'implémenter plusieurs interfaces.
• C# est le premier langage orienté composant dans la
famille C/C++
• Composant :
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS
• Composant :
– Un module indépendant, réutilisable
– Plus indépendant d’un langage
– Incluent de multiples classes
– Généralement un composant, ne connaît pas celui qui va
l’utiliser (entreprises différentes, langages de pr ogrammation
différents)
7
Calculateurs Temps Réel
Type C# Type .NET Donnée représentée CodageChar Char (S) caractère 2 octetsString String (C) chaîne de caractèresInt Int32(S) nombre entier 4 octetsUint Unit32(s) nombre entier 4 octetsLong Int64(S) nombre entier 8 octetsSbyte nombre entier 1 octetByte Byte (S) nombre entier 1 octetShort Int16 (S) nombre entier 2 octets
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS8
Short Int16 (S) nombre entier 2 octetsUshort UInt16 (S nombre entier 2 octetsFloat Single (S) Nombre réel 4 octetsDouble Double (S) Nombre réel 8 octetsDecimal Decimal (S) nombre décimal 16 octetsBool Boolean (S) booléen 1 octetObject Object (C) référence d'objet --------
S : type structure C : type classeLe type int est un alias C# qui désigne la structure .NET System.Int32.De même, le type C# string est un alias pour le type .NET System.String. System.String est une classe et nonune structure
Calculateurs Temps Réel
Déclarations de variables en C#
• Identificateur_de_typevariable1[=valeur1], variable 2 = [valeur2], ...;
Ou bien
• var variable1=valeur1, variable2=valeur2,...;
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS
• Les variables peuvent être initialisées lors de leu r déclaration :
Identificateur_de_type variable1[=valeur1],variable 2=[valeur2],...;
• On peut également ne pas préciser le type exact d'une variable en utilisant
var variable1=valeur1,variable2=valeur2,...;
Initialisation obligatoire9
Calculateurs Temps Réel
Les conversions entre nombres et chaînes de caractères
nombre -> chaîne nombre.ToString()chaine -> int int.Parse(chaine) ou
System.Int32.Parsechaîne -> long long.Parse(chaine) ou
System.Int64.Parsechaîne -> double double.Parse(chaîne) ou
System.Double.Parse(chaîne)chaîne -> float float.Parse(chaîne) ou
System.Float.Parse(chaîne)
class Exemple1{
static void Main(string[] args){const int a =10;
string b= Console.In.ReadLine();Int32 c=10000;affiche(c.ToString());var aujourdhui = DateTime.Now;
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS10
System.Float.Parse(chaîne)var aujourdhui = DateTime.Now;Console.WriteLine("La date est : {0}, son type est {1}", aujourdhui.ToString(),
aujourdhui.GetType().FullName);try{c = int.Parse(b);affiche(c.ToString());
}catch (Exception e){affiche("erreur "+ e.Message);
}}public static void affiche(string S ){Console.WriteLine("S={0}", S);
}
Calculateurs Temps Réel
• Ecriture sur écran
– Console.Out.WriteLine(expression)
– Console.WriteLine(expression)
– Console.Error.WriteLine (expression)
• Lecture de données tapées au clavier
– string ligne=Console.In.ReadLine();
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS
– string ligne=Console.In.ReadLine();
• Affectation de la valeur d'une expression à une variable
– int a , b = 56 ;
– a = (b = 12)+8 ; // b prend une nouvelle valeur da ns l'expression
– a = b = c = d =8 ; // affectation multiple
11
Calculateurs Temps Réel
• Type[] tableau[]=new Type[n]
• n est le nombre de données que peut contenir le
tableau
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS
• La syntaxe Tableau[i] désigne la donnée n°i où i
appartient à l'intervalle [0,n-1]
• int[] entiers=new int[] {0,10,20,30};
12
Calculateurs Temps Réel
• simple
– syntaxe : if (condition) {actions_condition_vraie; } else
{actions_condition_fausse;}
• Structure de cas
syntaxe : switch (expression) {
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS
syntaxe : switch (expression) {
case v1: actions1; break ;
case v2: actions2; break ;
. .. .. .. .. ..
default : actions_sinon; break ;
}
13
Calculateurs Temps Réel
• Structure forfor (i=id;i<=if;i=i+ip)
{actions;
}
• Structure foreachforeach (int i in fibarray){ actions;
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS
actions;}
• Structure whilewhile(condition){
actions;}
• Structure do whiledo{
instructions;}while(condition);
14
Calculateurs Temps Réel
• Syntaxe
try {
<lignes de code à protéger>
}catch ( UneException ) {
<lignes de code réagissant à l’exception UneException >
}
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
IntroductionTypes de donnéesInstructions élémentairesTableaux
Structures conditionnellesStructures itérativesExceptions
2012/2013ULS
}
finally{
code exécuté après try ou catch
}
• Le type UneException est obligatoirement une classe qui hérite de la classe Exception
• Clause optionnelle : finaly
15
Calculateurs Temps Réel
• Contrôles de base (Propriétés)
– un nom
– un emplacement
– une taille
– la possibilité d'être visible ou non
– etc …
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– etc …
• Contrôles de base (Evènements)
– Rafraîchissement de son affichage
– Clic sur le bouton gauche de la souris sur la zone qu'il
occupe
– Modification de sa taille
– …16
Calculateurs Temps Réel
• Contrôles de base (Propriétés)
– un nom
– un emplacement
– une taille
– la possibilité d'être visible ou non
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– etc …
• Contrôles de base (Evènements)
– Rafraîchissement de son affichage
– Clic sur le bouton gauche de la souris sur la zone qu'il
occupe
– Modification de sa taille
– …17
Calculateurs Temps Réel
Form• Classe : Form
• Propriétés :
– Name, Location, Text, Size , Icon, StartPosition
– Menu : pour associer un menu à la fenêtre
– Font : Permet de modifier la police de caractère et donc
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– Font : Permet de modifier la police de caractère et donc
l'apparence du contenu du contrôle graphique
• Evénements
– load : chargement de formulaire
– closing : le formulaire est en cours de fermeture
– Closed : le formulaire est fermé
18
Calculateurs Temps Réel
MessageBoxUtilisation de la méthode Show pour l’affichage d’u n MessageBox: public static DialogResult Show(string text, string caption, MessageBoxButtons
buttons, MessageBoxIcon icon);
• text : le message à afficher
• caption : le titre de la fenêtre
• buttons : les boutons présents dans la fenêtre
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
• buttons : les boutons présents dans la fenêtre
• icon : l'icone présente dans la fenêtre
• Le paramètre buttons peut prendre ses valeurs parmi les constantes
suivantes : AbortRetryIgnore, OK, OKCancel, RetryCan cel, YesNo,
YesNoCancel.
• Le paramètre icon peut prendre ses valeurs parmi les constantes
suivantes : Asterisk, Exclamation, Information, Ques tion, Warning
19
Calculateurs Temps Réel
Zone de texte statique• Classe : Label
• Propriétés :
– Name : Nom de l'objet instanciant la classe "Label
– Location : modifié graphiquement via l'éditeur de r essource
ou via l'éditeur de propriétés
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
ou via l'éditeur de propriétés
– Size : modifié graphiquement via l'éditeur de resso urce ou
via l'éditeur de propriétés
– Text : c'est la plus importante des propriétés de c e contrôle.
Elle sera fixée via l'éditeur de ressource dans la majorité des
cas.
20
Calculateurs Temps Réel
Zone d'édition• Classe : TextBox
• Propriétés :
– Name, Location, Size, Visible, Font
– Text : Cette propriété peut être initialisée via l 'éditeur de
ressource ou Modifiée par programmation ou par l'ut ilisateur
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
ressource ou Modifiée par programmation ou par l'ut ilisateur
– Enabled : Permet d'activer ou de désactiver le cont rôle
• Evénements
– Les événements claviers : KeyDown, KeyPress, KeyUp
– Les événements souris : MouseDown, MousePress, Mous eUp
– L'événement annonçant une modification du contenu d e la zone :
TextChanged21
Calculateurs Temps Réel
Case à cocher• Classe : CheckBox
• Propriétés :
– Name, Location, Size, Visible, Font
– Text : Initialisée via l'éditeur de ressource ou M odifiée par
programmation
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
programmation
– Enabled : Permet d'activer ou de désactiver le cont rôle
– Checked : contient l'état de la case (cochée ou non )
• Evénements
– CheckedChanged : indique une modification au niveau de l'état de
la case
22
Calculateurs Temps Réel
Boutons radios• Classe : RadioButton
• Propriétés :
– Name, Location, Size, Visible, Font
– Text : Initialisée via l'éditeur de ressource ou M odifiée par
programmation
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
programmation
– Enabled : Permet d'activer ou de désactiver le cont rôle
– Checked : contient l'état de la case (cochée ou non )
• Evénements
– CheckedChanged : indique une modification au niveau de l'état de
la case
23
Calculateurs Temps Réel
Bouton de commande
• Classe : Button
• Propriétés :
– Name, Location, Size, Visible, Font
– Text : Cette propriété peut être Initialisée via l 'éditeur de
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– Text : Cette propriété peut être Initialisée via l 'éditeur de
ressource ou modifiée par programmation
– Enabled : Permet d'activer ou de désactiver le cont rôle
• Evénements :
– Click : Pression du bouton
24
Calculateurs Temps Réel
Boite de liste• Classe : ListBox
• Propriétés :
– Name, Location, Size, Visible, Font, Enabled
– Items : Collection de données
– SelectedIndex : Représente l'index de l'élément sél ectionné dans
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– SelectedIndex : Représente l'index de l'élément sél ectionné dans
la liste (en commençant par 0)
– SelectedIndices : Idem mais avec plusieurs index da ns le cas
d'une liste autorisant plusieurs sélections simulta nées
– SelectedItem : Contient non pas l'indice mais l'obj et sélectionné
– SelectedItems : Idem mais dans le cadre d'une multi -sélection
– Sorted : Indique si les éléments de la boite doiven t être triés ou
non 25
Calculateurs Temps Réel
Boite de liste• Ce type de contrôle est amené à contenir une liste de
valeurs.
• Pas de propriété "Text" pour ce contrôle
• On y trouve une propriété "Items" représentant une
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
collection de données représentant les informations
contenues au sein de la liste graphique.
• Evénements
– SelectedIndexChanged : Indique que l'élément sélect ionné dans la
liste vient de changer
– DoubleClick : Indique un double-clic sur un élément dans la liste
26
Calculateurs Temps Réel
Boite de liste "combo"• Classe : ComboBox
• Propriétés :
– Name, Location, Size, Visible, Font, Enabled
– Items : Collection de données
– SelectedIndex : Représente l'index de l'élément sél ectionné dans
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– SelectedIndex : Représente l'index de l'élément sél ectionné dans
la liste (en commençant par 0)
– SelectedItem : Contient non pas l'indice mais l'obj et sélectionné
– Text : représente le texte affiché dans la "zone d' édition"
– Sorted :
27
Calculateurs Temps Réel
• Evénements
– SelectedIndexChanged : Indique que l'élément sélect ionné
dans la liste vient de changer
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
Boite de liste "combo"
2012/2013ULS
dans la liste vient de changer
– TextChanged : Soit l'élément sélectionné dans la li ste vient
de changer, soit l'utilisateur est en train de modi fier la zone
d'édition manuellement
28
Calculateurs Temps Réel
Zone de groupe
• Classe : GroupBox
• Propriétés :
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– Name, Location, Size, Visible, Font, Enabled
– Text : représente le texte affiché en en-tête dans la zone de
groupe. Permet de donner un titre, une significatio n au groupe
de contrôle courant
29
Calculateurs Temps Réel
Zone d'édition étendue• Classe : RichTextBox• Propriétés :
– Name, Location, Size, Visible, Font, Enabled, Text
– Multiline : permet de définir si la zone contient u ne ou plusieurs lignes de texte
• Evénements :
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
• Evénements :
– Les événements claviers : KeyDown, KeyPress, KeyUp
– Les événements souris : MouseDown, MousePress, Mous eUp
– L’événement annonçant une modification du contenu d e la zone : TextChanged
– HelpRequested : demande d'aide de la part de l'util isateur
– SelectionChanged : indique que la sélection du text e ou d'une partie de celui-ci vient d'être modifiée
30
Calculateurs Temps Réel
Variateurs ScrollBar• Propriétés :
– Value : valeur du variateur
– Minimum et Maximum : valent par défaut 0 et 100.
– SmallChange : vaut par défaut 1. Elle fait varier l a valeur
d'un incrément
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
d'un incrément
– LargeChange : vaut par défaut 10.
• Evénements
– Scroll
31
VScrollBarHScrollBar
Calculateurs Temps Réel
NumericUpDown
• Propriétés :
– Value : valeur du variateur
– Minimum et Maximum : valent par défaut 0 et 100.
– Increment
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– .
• Evénements
– ValueChanged
32
NumericUpDown
Calculateurs Temps Réel
Fenêtre avec menu• Classe : MenuStrip
• Propriétés
– Name : le nom du contrôle menu
– Text : le libellé de l'option de menu
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
• Evénements
– Click
33
Calculateurs Temps Réel
SaveFileDialog et OpenFileDialog• Propriétés
– Filter : les types de fichiers proposés dans la list e déroulante
des types de fichiers de la boîte de dialogue
– FilterIndex : le n°du type de fichier proposé par dé faut dans
la liste ci -dessus
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
la liste ci -dessus
– InitialDirectory : le nom du fichier de sauvegarde i ndiqué par
l'utilisateur
– FileName : le dossier présenté initialement pour la
sauvegarde du fichier
• Méthodes
– ShowDialog
34
Calculateurs Temps Réel
Boîte de dialogue FontDialog • Classe : FontDialog
• Propriétés
– Font
• Méthodes
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– ShowDialog
35
Calculateurs Temps Réel
Boîte de dialogue ColorDialog
• Classe : ColorDialog
• Propriétés
– Color
• Méthodes
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– ShowDialog
36
Calculateurs Temps Réel
Boîte de dialogue FolderBrowserDialog
• Classe : FolderBrowserDialog
• Propriétés
– SelectedPath
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
– SelectedPath
– RootFolder
• Méthodes
– ShowDialog
37
Calculateurs Temps Réel
Composants non visuels : Timer
• Un timer génère tous les x temps (valeur de la
variable membre "Interval" de l'objet Timer) un
événement qu'il suffit d'intercepter.
• Classe : Timer
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Contrôles de baseComposants non visuels
2012/2013ULS
• Propriétés
– Interval : nombre de millisecondes au bout duquel un
événement Tick est émis
– Enabled : rend le timer actif (true) ou inactif (fal se)
• Evénements
– Tick l'événement produit à la fin de Interval en mi llisecondes
38
Calculateurs Temps Réel
• mode connecté :
– l'application ouvre une connexion avec la source de données
– l'application travaille avec la source de données en
lecture/écriture
– l'application ferme la connexion
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
– l'application ferme la connexion
� Connexion permanente avec le serveur et gaspillage de
beaucoup de ressource ����des problèmes d’accès au réseau.
☺☺☺☺ la gestion est simple et facilité de contrôle des u tilisateurs
connectés
39
Calculateurs Temps Réel
• mode déconnecté :
– l'application ouvre une connexion avec la source de données
– elle obtient une copie mémoire de tout ou partie de s données
de la source et elle ferme la connexion
– L’application travaille avec la copie mémoire des d onnées en
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
– L’application travaille avec la copie mémoire des d onnées en
lecture/écriture
– Lorsque le travail est fini, elle ouvre une conn exion
– envoie les données modifiées à la source de donné es pour
qu'elle les prenne en compte et
– L’application ferme la connexion
40
Calculateurs Temps Réel
• mode déconnecté :
☺☺☺☺ Possibilité de brancher un nombre important d’utili sateurs
sur le même serveur
☺ l’application gagne en performance par la disponibi lité des
ressources pour les connexions
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
ressources pour les connexions
���� les données ne sont pas toujours à jour
���� Des conflits lors des mises à jour
���� Il faut aussi penser à prévoir du code pour savoir ce que va
faire l’utilisateur en cas de conflits.
41
Calculateurs Temps Réel
• ADO .NET est un regroupement de types (classes,
interfaces, …) dans l'espace de nom System.Data
• Le modèle ADO .NET du .NET Framework fournit au
développeur un ensemble d'éléments lui permettant
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
de travailler sur des données aussi bien en mode
connecté qu'en mode déconnecté
• le plus adapté aux architectures multi-tiers).
42
Calculateurs Temps Réel
• Pour se connecter à une base de données via
ADO.NET un Data Provider
– SQL Server Provider : pour SQL Server
– OLEDB provider : pour toutes les bases de données
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
disposant d'un pilote OLE DB (Object Linking and
Embedding). La plupart des bases de données ont don c un
pilote OLE DB (MySQL, Access, Oracle SQL Server, et c..).
– Oracle provider : pour Oracle (version 8i et plus).
– ODBC provider : pour toutes les sources de données q ui ont
un pliote ODBC (Open DataBase Connectivity).
43
Calculateurs Temps Réel
• Pour se connecter à une base de données via
ADO.NET un Data Provider
– SQL Server Provider : pour SQL Server
– OLEDB provider : pour toutes les bases de données
disposant d'un pilote OLE DB (Object Linking and
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
disposant d'un pilote OLE DB (Object Linking and
Embedding). La plupart des bases de données ont don c un
pilote OLE DB (MySQL, Access, Oracle SQL Server, et c..).
– Oracle provider : pour Oracle (version 8i et plus).
– ODBC provider : pour toutes les sources de données q ui ont
un pliote ODBC (Open DataBase Connectivity).
44
Calculateurs Temps RéelIntroduction à .NET
Le langage C #Programmation événementielle et visuelle avec C#
Accès aux bases de donnéesProgrammation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS45
Calculateurs Temps Réel
• Connection : gère les connections vers la base de
données
• Transaction : gère les transactions vers la base de
données.Un objet Transaction peut être récupérer à partir
d’un objet connection via l’appel à la méthode
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS46
d’un objet connection via l’appel à la méthode
beginTransaction()
• DataAdapter : sert de liaison entre la base de données et
un DataSet.
• Command :gère les commandes SQL vers la base de
données (SELECT, INSERT, UPDATE, DELETE)
Calculateurs Temps Réel
• DataReader : permet de lire 1 à 1, en mode connecté, les
résultats retournés par l’exécution de la commande SQL
• DataSet : container de DataTable et DataRelation, stocké
en mémoire. C’est l’objet central de manipulation des
objets déconnectés.
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS47
objets déconnectés.
• DataTable : table de jeux de données résidant en
mémoire. Il comporte une collection de colonnes
DataColumn et éventuellement de contraintes
DataConstraint. L’ensemble des données sont stockées
dans une collection de DataRow..
Calculateurs Temps Réel
• Déclaration des composants ADO.NET
– private string CnString;
– private OleDbConnection Cn;
– public DataSet Ds;
– OleDbDataAdapter adapter;
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
– OleDbDataAdapter adapter;
– DataTable Dt;
• Etablissement de la connexion
– CnString = @"Provider=Microsoft.JET.OLEDB.4.0;" + @ "data
source=" + Application.StartupPath + @"\database na me";
– Cn = new OleDbConnection(CnString);
48
Calculateurs Temps Réel
• Etablissement de la connexion
– adapter = new OleDbDataAdapter("Select * from Table ", Cn);
– Dt = new DataTable(« Column name");
– Cn.Close();
�Exécution d’une commande SQL
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
– OleDbCommand Cmd = new OleDbCommand();
– Cmd.Connection = Cn;
– Cmd.CommandText = "insert into TableName( .., ..) val ues (‘….', ‘….')";
– Cn.Open();
– Cmd.ExecuteNonQuery();
– Cn.Close();
49
Calculateurs Temps Réel
• Etablissement de la connexion
– adapter = new OleDbDataAdapter("Select * from Table ", Cn);
– Dt = new DataTable(« Column name");
– Cn.Close();
• Exécution d’une commande SQL
– OleDbCommand Cmd = new OleDbCommand ();
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
– OleDbCommand Cmd = new OleDbCommand ();
– Cmd.Connection = Cn;
– Cmd.CommandText = "insert into TableName( .., ..) val ues (‘….', ‘….')";
– Cn.Open();
– Cmd.ExecuteNonQuery();
– Cn.Close();
50
Calculateurs Temps Réel
• Affichage des données dans une grille
personnalisable :
• Utilisation du contrôle DataGridView fournit une table
personnalisable pour l'affichage des données
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Modes d’exploitation d’une source de données Connecteur ADO.NET Etablissement d’une connexion
2012/2013ULS
– Cn.Open();
– adapter.Fill(Dt);
– Cn.Close();
– dataGridView1.DataSource = Dt;
51
Calculateurs Temps Réel
• Protocoles Internet
• Modèle TCP/IP
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Pré-requis
2012/2013ULS
• Modèle OSI
• Fonctionnement des protocoles de l'Internet
52
Calculateurs Temps Réel
• Propriétés
– AddressFamily AddressFamily : famille de l'adresse IP. Le type
AddressFamily est une énumération. Les deux valeurs courantes
sont :
o AddressFamily.InterNetwork : pour une adresse IPv4
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
La classe IPAddress
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
o AddressFamily.InterNetwork : pour une adresse IPv4
o AddressFamily.InterNetworkV6 : pour une adresse IPv6
– IPAddress[] AddressList : tableau des adresses IP de la machine
– String[] Aliases : les alias DNS de la machine. Ceux-ci sont
les noms correspondant aux différentes adresses IP de la
machine.
– string HostName : le nom d'hôte principal de la machine
53
Calculateurs Temps Réel
– GetHostEntry (string hostNameOrdAddress) : rend une adresse IPHostEntry à partir d'une adresse IP sous la forme d'une chaîne ou à partir d'un nom de machine.
– GetHostEntry (IPAddress ip) : rend une adresse IPHostEntry à
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
•L'association adresse IP <--> nomMachine est assurée par le serviceDNS. Les méthodes statiques de la classe Dns permettent de fa irel'association adresse IP <--> nomMachine :
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
partir d'une adresse IP de type IPAddress. Lance une exception si la machine ne peut être trouvée
– string GetHostName(): rend le nom de la machine sur laquelle s'exécute le programme qui joue cette instruction
– IPAddress[] GetHostAddresses (string hostNameOrdAdd ress): rend les adresses IP de la machine identifiée par son nom ou l'une de ses adresses IP.
54
Calculateurs Temps Réel
– IPAddress[] AddressList : tableau des adresses IP de la machine
– String[] Aliases : l es alias DNS de la machine. Ceux-ci sont les noms correspondant aux différentes adresses IP de la machine.
– str string HostName : le nom d'hôte principal de la machine.
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
• Une instance IPHostEntry encapsule les adresses IP, les ali as et lenom d'une machine. Le type IPHostEntry est le suivant :
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS55
static void Main(string[] args){
IPHostEntry ipHost;// IPAddress.Any ip;
Console.WriteLine("Machine Locale= {0}", Dns.GetHostName());
string machine = Console.ReadLine().Trim().ToLower();Console.WriteLine(machine);ipHost = Dns.GetHostEntry(machine);
// le nom de la machineConsole.WriteLine("Machine : " + ipHost.HostName);// les adresses IP de la machineConsole.Write("Adresses IP : {0}", ipHost.AddressList[0]);
for (int i = 1; i < ipHost.AddressList.Length; i++) {Console.Write(", {0}" , ipHost.AddressList[i]);}
}
Calculateurs Temps RéelIntroduction à .NET
Le langage C #Programmation événementielle et visuelle avec C#
Accès aux bases de donnéesProgrammation Réseau
Classes .NET pour la programmation Réseau
Socket
WebClient SMTPClient TcpClient, TcpListenerApplication A
Application B Application C Application D
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
• La classe Socket :
– permet de gérer finement la connexion réseau
– Le terme socket désigne une prise de courant
– Le terme socket désigne une prise de résea u logicielle
56
SocketRéseau
Calculateurs Temps Réel
• La classe Socket :
– Dans une Communication TCP-IP entre deux machines A et B, ce sont deux sockets qui communiquent entre-eux
– Une application peut travailler directement avec le s sockets. C'est le cas de l'application A
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Classes .NET pour la programmation Réseau
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
– Un socket peut être un socket client ou serveur
• Un niveau moins fin que celui de la classe Socket
– TcpClient pour créer un client Tcp
– TcpListener pour créer un serveur Tcp
����Une vue plus simple de la communication réseau en g érant pour
elle les détails techniques de gestion des sockets.57
Calculateurs Temps Réel
• Classes spécifiques pour certains protocoles
– la classe SmtpClient pour gérer le protocole SMTP de
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
Classes .NET pour la programmation Réseau
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
communication avec un serveur SMTP d'envoi de co urriers
électroniques
– La classe WebClient pour gérer les protocoles HTTP ou FTP
de communication avec un serveur web
58
Calculateurs Temps Réel
• Classe TcpClient
– TcpClient(string hostname, int port) : crée une liaison tcp avec le service opérant sur le port indiqué (port) de la machine indiquée (hostname)
– NetworkStream GetStream() : obtient un flux de lecture et d'écriture vers le serveur. C'est ce flux qui permet les échanges client-serveu. La classe NetworkStream représente le flux réseau entre le
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
serveu. La classe NetworkStream représente le flux réseau entre le client et le serveur
– void Close() : ferme la connexion. Le socket et le flux NetworkStream sont également fermés
– bool Connected() : vrai si la connexion a été établie
– Socket Client : (Propriété de TcpClient) Socket utilisé par le client pour communiquer avec le serveur.
59
Calculateurs Temps Réel
Classe TcpClient
static void Main(string[] args)
{
try
{
// on se connecte au service
using ( TcpClient tcpClient = new TcpClient( "localhost", 80))
{
using ( NetworkStream networkStream = tcpClient.GetStream() )
{
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
using ( StreamReader reader = new StreamReader(networkStream))
{
using ( StreamWriter writer = new StreamWriter(networkStream))
{
// flux de sortie non bufferisé
writer.AutoFlush = true;
// boucle demande - réponse
while (true)
{
// la demande vient du clavier
Console.Write( "Demande (bye pour arrêter) : ");
string demande = Console.ReadLine();
// fini ?
60
Calculateurs Temps Réel
Classe TcpClient
if (demande.Trim().ToLower() == "bye")
break;
// on envoie la demande au serveur
writer.WriteLine(demande);
// on lit la réponse du serveur
string réponse = reader.ReadLine ();
// on traite la réponse
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
}
}
}
}
}
}
catch ( Exception e)
{
// erreur
}
}
61
Calculateurs Temps Réel
• Classe TcpListener
– TcpListener(int port) : constructeur qui crée un service TCP qui va attendre (listen) les demandes des clients sur un port passé en paramètre (port) appelé port d'écoute. Si la machine est connectée à plusieurs réseaux IP, le service écoute sur chacun des réseau
– TcpListener(IPAddress ip, int port) : constructeur où l’écoute n'a lieu que sur l'adresse ip précisée
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
2012/2013ULS
que sur l'adresse ip précisée
– void Start() : lance l'écoute des demandes clients
– TcpClient AcceptTcpClient( ) : accepte la demande d'un client. Ouvre alors une nouvelle connexion avec celui-ci, appelée connexion de service. Le port utilisé côté serveur est aléatoire et choisi par le système. On l'appelle le port de service. AcceptTcpClient rend comme résultat l'objet TcpClient associé côté serveur à la connexion de service
62
Calculateurs Temps Réel
• Classe TcpListener
– Void stop(): arrête d'écouter les demandes clients
– Socket Server : le socket d'écoute du serveur
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
static void Main(string[] args){
// on crée le service d'écouteTcpListener ecoute = null;try {// on crée le service - il écoutera sur toutes les interfaces réseau de la machineecoute = new TcpListener(IPAddress.Any, port);// on le lance
2012/2013ULS63
// on le lanceecoute.Start();// boucle de serviceTcpClient tcpClient = null;// boucle infinie - sera arrêtée par Ctrl-Cwhile (true) {// attente d'un clienttcpClient = ecoute.AcceptTcpClient();// le service est assuré par une autre tâcheThreadPool.QueueUserWorkItem(Service, tcpClient);// client suivant}} catch (Exception ex) {// on signale l'erreur
} finally {// fin du service
ecoute.Stop();}
Calculateurs Temps Réel
• Classe TcpListener
Introduction à .NETLe langage C #
Programmation événementielle et visuelle avec C#Accès aux bases de données
Programmation Réseau
La classe IPAddressClasses .NET pour la programmation RéseauClasse TcpClientclasse TcpListener
public static void Service(Object infos) {// on récupère le client qu'il faut servirClient client = infos as Client;// exploitation liaison TcpClienttry {using (TcpClient tcpClient = client.CanalTcp) {using (NetworkStream networkStream = tcpClient.GetStream()) {using (StreamReader reader = new StreamReader(networkStream)) {using (StreamWriter writer = new StreamWriter(networkStream)) {// flux de sortie non bufferiséwriter.AutoFlush = true;// boucle lecture demande/écriture réponsebool fini=false;
2012/2013ULS64
while (! fini) != null) {// attente demande client - opération bloquantedemande=reader.ReadLine();// préparation réponse//réponse=...;// envoi réponse au clientwriter.WriteLine(réponse);// demande suivant}} }}}} catch (Exception e) {// erreur
} finally {// fin client
}}}}
Calculateurs Temps RéelRéférences
• http://www.csharpfr.com
• http://www.csharphelp.com/index.html
• http://www.codeproject.com/csharp/
• APPRENTISSAGE DU LANGAGE C# , Serge Tahé
2012/2013ULS 65
• J.Gabillaud, ADO.NET l'accès aux données, Ed.ENI,
Nantes (2004)
• M.de Champlain, G.Patrick, C# 2.0 guide pratique du
développeur, Dunod, Paris (2005)