cours C# ULS

65
Calculateurs Temps Réel Programmation Evenementielle en C# Université Libre de Sfax 2012/2013 ULS Yessine HADJ KACEM [email protected]

Transcript of cours C# ULS

Calculateurs Temps Réel

Programmation Evenementielle en

C#

Université Libre de Sfax

2012/2013ULS

Yessine HADJ KACEM

[email protected]

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)