Cours Client Serveur
Cours Client Serveur
Cours Client Serveur
client/serveur
avec le langage C#
1
Plan
1. Architecture Client/Serveur
2. Architecture 2-tiers
3. Architecture 3-tiers
4. Architecture n-tiers
5. ADO.NET
6. Fournisseurs de données
7. Architecture ADO.NET
8. Modes de connexion
7. Mode connecté
8. Mode déconnecté
2
Architecture Client/Serveur
• L'environnement client-serveur désigne un mode
de communication à travers un réseau entre
plusieurs ordinateur : l'un, qualifié de client, envoie
des requêtes ; l'autre, qualifié de serveur, attend
les requêtes des clients et y répond.
• En général, les serveurs sont des ordinateurs
dédiés au logiciel serveur, et dotés de capacités
supérieures à celles des ordinateurs personnels en
termes de puissance de calcul, d'entrées-sorties et
de connexions réseau.
• Les clients sont souvent des ordinateurs personnels.
Clients
3
Architecture Client/Serveur
Avantages de cette architecture :
• Unicité de l'information : pour un site web
dynamique par exemple , certains articles du site sont
stockés dans une base de données sur le serveur. De
cette manière, les informations restent identiques.
Chaque utilisateur accède aux mêmes informations.
• Meilleure sécurité : Lors de la connexion un PC
client ne voit que le serveur.
• Meilleure fiabilité : En cas de panne, seul le serveur
fait l'objet d'une réparation.
• Facilité d'évolution : Une architecture client/serveur
est évolutive car il est très facile de rajouter ou
d'enlever des clients, et même des serveurs.
4
Architecture Client/Serveur
5
Architecture 2-tiers
6
Architecture 3-tiers
L'architecture logique du système est divisée en trois
niveaux ou couches :
• couche présentation: Un client équipé d'une interface
utilisateur (généralement un navigateur web).
• couche métier: Un serveur d'application (appelé
middleware) qui fournit la ressource.
• couche accès aux données: Un serveur de données
qui fournit au serveur d'application les données
requises pour répondre au client.
Métier
Présentation
Accès aux données
7
Architecture n-tiers
8
ADO.Net
9
Fournisseurs de données
10
Fournisseurs de données
Plusieurs espaces de noms sont disponibles avec ADO .Net
parmi lesquels :
• OleDb: System.Data.OleDb
OleDB est une interface permettant l'accès " universel "
aux données de n'importe quel type indépendamment de
leur format ou de leur méthode de stockage (Excel,
fichiers texte,…).
• ODBC(Open Database Connectivity): System.Data.Odbc
ODBC permet d'interfacer de façon standard une
application à n'importe quel serveur de bases de
données.
Le logiciel ODBC de Microsoft est fourni avec les pilotes
pour les SGBD: Access, SQL Server,….
11
Fournisseurs de données
• Oracle: System.Data.OracleClient
12
Architecture ADO.NET
13
Accéder à la base de données
• Pour dialoguer avec la base de données, tous les
fournisseurs implémentent les classes suivantes:
Objet Description
Ouvre une connexion vers une source de données
Connection
spécifique
Command Exécute une commande sur une source de données
14
Modes de connexion
• L’ADO.NET permet de séparer les actions d’accès ou
de modification d’une base de données.
L’ADO.NET permet l’accès à la base de données en
deux modes:
15
Modes de connexion
Modes Avantages Inconvénients
18
Objet Connection
• OleDB: base de donnée ACCESS
using System.Data.OleDb;
class Connexion
{
static void Main(string[] args)
{
string source ="Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\\bd1.accdb"; //chaîne de la connexion: Provider=nom du fournisseur
OleDbConnection connexion = new OleDbConnection(source);
try {
connexion.Open(); //ouvrir la connexion
}
catch (Exception ex) { Console.WriteLine("problème de connexion,
"+ex.Message); }
connexion.Close(); //fermer la connexion
}
} 19
Objet Connection
• ODBC: base de donnée ACCESS
Il faut ajouter d’abord la base de données dans l’utilitaire de Windows « Sources
de données ODBC »
using System.Data.Odbc;
class Connexion
{
static void Main(string[] args)
{
string source = " Dsn=bd1"; /*chaîne de la connexion: Dsn=nom de la
source de données*/
OdbcConnection connexion = new OdbcConnection(source);
try { connexion.Open();
}
catch (Exception ex) { Console.WriteLine(« problème de connexion,
"+ex.Message); }
connexion.Close();
} } 20
Objet Connection
• Sql Server: base de donnée Microsoft Sql Server
using System;
using System.Data.SqlClient;
class Connexion
{
static void Main(string[] args)
{
string source = "Data Source=SARA\\SQLEXPRESS01; Initial
Catalog=db1;Integrated Security=True; ";
SqlConnection connexion = new SqlConnection(source);
try { connexion.Open();
}
catch (Exception ex) { Console.WriteLine("problème de connexion,
"+ex.Message); }
connexion.Close();
} }
21
Objet Command
• les requêtes SQL et les procédures stockées sont
exécutées à partir de l’objet Command:
Ou:
SqlCommand commande = new SqlCommand("SELECT * FROM Client",
connexion);
Ou:
SqlCommand commande = connexion.CreateCommand();
commande.CommandText = "SELECT * FROM Client";
22
Objet Command
• Exécuter une requête (INSERT,UPDATE,DELETE):
commande.ExecuteNonQuery();
Exemple:
SqlCommand commande= new SqlCommand();
commande.Connection = connexion;
commande.CommandText =
"DELETE FROM maTable WHERE id < " +valeur;
int nbEnregistrementsAffectes = commande.ExecuteNonQuery();
if (nbEnregistrementsAffectes > 0)
{ Console.WriteLine(nbEnregistrementsAffectes + " enregistrements su
pprimés");
}
else
{ Console.WriteLine("Aucun enregistrement supprimé"); }
23
Objet Command
• Exécuter une requête (SELECT):
La Requête Retourne un objet:
commande.ExecuteScalar ();
Exemple:
commande.CommandText =
"SELECT NomClient FROM Clients WHERE IdClient = " +valeur;
string nomDuClient = commande.ExecuteScalar().ToString();
Console.WriteLine("Mon client s'appelle " + nomDuClient);
24
Objet DataReader
• Exécuter une requête (SELECT):
Retourne plusieurs enregistrements (DataReader):
SqlDataReader reader = maCommande.ExecuteReader();
On n'oublie pas de fermer le reader : reader.Close();
Exemple:
commande.CommandText = "SELECT idClient,nomClient FROM Clients " ;
SqlDataReader reader = commande.ExecuteReader();
while (reader.Read()){
Console.WriteLine(reader["idClient"].ToString() + " ," + reader["nomClient"].ToSt
ring());
// ou
Console.WriteLine(reader[0].ToString() + " ," + reader[1].ToString());
}
reader.Close();
25
Exemple
using System;
using System.Data. SqlClient;
class Connexion{
static void Main(string[] args)
{
string source = "Data Source=SARA\\SQLEXPRESS01; Initial Catalog=bd1;Integrated
Security=True";
SqlConnection connexion = new SqlConnection(source);
connexion.Open();
SqlCommand commande= new SqlCommand();
commande.Connection = connexion;
commande.CommandText = "select * from Clients " ;
SqlDataReader reader = commande.ExecuteReader();
while (reader.Read()){
Console.WriteLine(reader["idClient"].ToString() + " ," + reader["nomClient"].ToString());
// ou
Console.WriteLine(reader[0].ToString() + " ," + reader[1].ToString()); }
reader.Close();
connexion.Close();
26
}