achref el mouelhic#: ado.net achref el mouelhi docteur de l’universite d’aix-marseille´...

38
C# : ADO.NET Achref El Mouelhi Docteur de l’universit ´ e d’Aix-Marseille Chercheur en programmation par contrainte (IA) Ing ´ enieur en g ´ enie logiciel [email protected] H & H: Research and Training 1 / 32

Upload: others

Post on 07-Nov-2020

14 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

C# : ADO.NET

Achref El Mouelhi

Docteur de l’universite d’Aix-MarseilleChercheur en programmation par contrainte (IA)

Ingenieur en genie logiciel

[email protected]

H & H: Research and Training 1 / 32

Page 2: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

Plan

1 Introduction

2 Referencement de MySQL dans un projet C#

3 CRUD avec ADO.NET

4 Restructuration du code

H & H: Research and Training 2 / 32

Page 3: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Introduction

ADO.NET

ADO.NET : ActiveX Data Objects

Un module (ensemble de classes) dans .NET Framework.

Exposant les services d’acces et de gestion de donnees situeesdans une base de donnees relationnelle (SQL Server, MySQL...)ou NoSQL.

Constitue de deux composants : un premier pour la connexion etun second pour la gestion.

H & H: Research and Training 3 / 32

Page 4: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Introduction

ADO.NET

Quelques classes de ADO.NET

Connection : permet d’assurer la connectivite avec une sourcede donnees

Command : permet de definir des requetes SQL afin de lire ouecrire de donnee, ou d’executer des procedures stockees...

DataReader : fournit un flux tres performant de donnees enprovenance de la source de donnees.

DataAdapter : utilise la requete definie dans un objet Commands afin de charger le DataSet avec des donnees.

DataSet : est un tableau concu pour accueillir des donneesvenant d’une source de donnees relationnelle.

H & H: Research and Training 4 / 32

Page 5: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Introduction

ADO.NET

Deux modes de fonctionnement

Mode connecte : le programme se connecte a la base dedonnees et effectue des operations comme SELECT, INSERT,UPDATE... La connexion est ensuite fermee et aucune donneen’est donc stockee en memoire sur le client.

Mode deconnecte : le programme se connecte a la base dedonnees, recupere les donnees et les stocker en memoire etreferme immediatement la connexion. Les operations sur lesdonnees (affichage...) ne se font qu’une fois la connexion fermee.

H & H: Research and Training 5 / 32

Page 6: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Introduction

ADO.NET

Pour se connecter a une base de donnees (autre que SQL Server ) apartir de Visual Studio

Il faut :

Un connecteur (MySQL Connector ici)

Integrer MySQL dans Visual Studio

Commencons par telecharger (les installers .msi)

https://dev.mysql.com/downloads/connector/net/

https://dev.mysql.com/downloads/windows/visualstudio/1.2.html

H & H: Research and Training 6 / 32

Page 7: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Introduction

ADO.NET

Pour se connecter a une base de donnees (autre que SQL Server ) apartir de Visual Studio

Il faut :

Un connecteur (MySQL Connector ici)

Integrer MySQL dans Visual Studio

Commencons par telecharger (les installers .msi)

https://dev.mysql.com/downloads/connector/net/

https://dev.mysql.com/downloads/windows/visualstudio/1.2.html

H & H: Research and Training 6 / 32

Page 8: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Introduction

ADO.NET

Ensuite

Installer les deux

(Re)lancer Visual Studio

Creer un nouveau projet C# (Application Console) nommeCoursAdoDotNet

H & H: Research and Training 7 / 32

Page 9: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Referencement de MySQL dans un projet C#

ADO.NET

Pour utiliser une base de donnees MySQL dans un projet C#, ilfaut l’ajouter en tant que reference

Etapes

Dans l’Explorateur de solutions, faire un clic droit surReferences et choisir Ajouter une reference

Ouvrir le menu Assemblys et cliquer sur Extensions

Chercher MySql.Data et cocher la case correspondante

Valider en cliquant sur Ok

Pour l’utiliser, il faut utiliser l’espace de noms suivant :

using MySql.Data.MySqlClient;

H & H: Research and Training 8 / 32

Page 10: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Referencement de MySQL dans un projet C#

ADO.NET

Pour utiliser une base de donnees MySQL dans un projet C#, ilfaut l’ajouter en tant que reference

Etapes

Dans l’Explorateur de solutions, faire un clic droit surReferences et choisir Ajouter une reference

Ouvrir le menu Assemblys et cliquer sur Extensions

Chercher MySql.Data et cocher la case correspondante

Valider en cliquant sur Ok

Pour l’utiliser, il faut utiliser l’espace de noms suivant :

using MySql.Data.MySqlClient;

H & H: Research and Training 8 / 32

Page 11: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Referencement de MySQL dans un projet C#

ADO.NET

Pour utiliser une base de donnees MySQL dans un projet C#, ilfaut l’ajouter en tant que reference

Etapes

Dans l’Explorateur de solutions, faire un clic droit surReferences et choisir Ajouter une reference

Ouvrir le menu Assemblys et cliquer sur Extensions

Chercher MySql.Data et cocher la case correspondante

Valider en cliquant sur Ok

Pour l’utiliser, il faut utiliser l’espace de noms suivant :

using MySql.Data.MySqlClient;

H & H: Research and Training 8 / 32

Page 12: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Referencement de MySQL dans un projet C#

ADO.NET

Avant de commencer, voici le script SQL qui permet de creer la base dedonnees utilisee dans ce cours

CREATE DATABASE myBase;

USE myBase;

CREATE TABLE personne(num INT PRIMARY KEY AUTO_INCREMENT,nom VARCHAR(30),prenom VARCHAR(30));

SHOW TABLES;

INSERT INTO personne (nom, prenom) VALUES ("Wick", "John"),("Dalton", "Jack");

SELECT * FROM personne;

H & H: Research and Training 9 / 32

Page 13: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Les etapes pour faire le CRUD

Construire la chaıne de connexion

Etablir la connexion

Preparer la commande

Executer la commande (et recuperer le resultat)

H & H: Research and Training 10 / 32

Page 14: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Construire la chaıne de connexion

MySqlConnectionStringBuilder conn = new MySqlConnectionStringBuilder();conn.Server = "localhost";conn.UserID = "root";conn.Password = "";conn.Database = "myBase";//conn.SslMode = MySqlSslMode.None;conn.Port = 3306;var connString = conn.ToString();

Etablir la connexion

MySqlConnection mySqlConnection = new MySqlConnection(connString);mySqlConnection.Open();

H & H: Research and Training 11 / 32

Page 15: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Construire la chaıne de connexion

MySqlConnectionStringBuilder conn = new MySqlConnectionStringBuilder();conn.Server = "localhost";conn.UserID = "root";conn.Password = "";conn.Database = "myBase";//conn.SslMode = MySqlSslMode.None;conn.Port = 3306;var connString = conn.ToString();

Etablir la connexion

MySqlConnection mySqlConnection = new MySqlConnection(connString);mySqlConnection.Open();

H & H: Research and Training 11 / 32

Page 16: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Preparer la commande

String query = "SELECT * FROM personne";MySqlCommand mySqlCommand = new MySqlCommand(query,

mySqlConnection);

Executer la commande et recuperer le resultat (lecture)

MySqlDataReader result = mySqlCommand.ExecuteReader();while (result.Read()){Console.WriteLine("{0} {1} {2}", result[0], result[1], result

[2]);}result.Close();mySqlConnection.Close();

H & H: Research and Training 12 / 32

Page 17: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Preparer la commande

String query = "SELECT * FROM personne";MySqlCommand mySqlCommand = new MySqlCommand(query,

mySqlConnection);

Executer la commande et recuperer le resultat (lecture)

MySqlDataReader result = mySqlCommand.ExecuteReader();while (result.Read()){Console.WriteLine("{0} {1} {2}", result[0], result[1], result

[2]);}result.Close();mySqlConnection.Close();

H & H: Research and Training 12 / 32

Page 18: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NETUne deuxieme solution (plus verbeuse) avec MySqlDataAdapter et DataSet

DataSet myDataSet = new DataSet();String query = "SELECT * FROM personne";MySqlCommand mySqlCommand = new MySqlCommand(query,

mySqlConnection);MySqlDataAdapter adapter = new MySqlDataAdapter(mySqlCommand);adapter.Fill(myDataSet, "Personne");mySqlConnection.Close();foreach (DataRow row in myDataSet.Tables["Personne"].Rows){

Console.WriteLine(row["num"] + " " + row["nom"] + " " + row["prenom"]);

}

L’espace de noms System.Data est necessaire pour cette deuxieme solution

using System.Data;

H & H: Research and Training 13 / 32

Page 19: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NETUne deuxieme solution (plus verbeuse) avec MySqlDataAdapter et DataSet

DataSet myDataSet = new DataSet();String query = "SELECT * FROM personne";MySqlCommand mySqlCommand = new MySqlCommand(query,

mySqlConnection);MySqlDataAdapter adapter = new MySqlDataAdapter(mySqlCommand);adapter.Fill(myDataSet, "Personne");mySqlConnection.Close();foreach (DataRow row in myDataSet.Tables["Personne"].Rows){

Console.WriteLine(row["num"] + " " + row["nom"] + " " + row["prenom"]);

}

L’espace de noms System.Data est necessaire pour cette deuxieme solution

using System.Data;

H & H: Research and Training 13 / 32

Page 20: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

DataSet vs DataReader

DataReader : fonctionne en mode connecte.

DataSet : fonctionne en mode deconnecte.

DataReader : plus rapide

DataSet : explicitement concu pour un acces aux donneesindependamment de toute source de donnees (XML, Base dedonnees...)

H & H: Research and Training 14 / 32

Page 21: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Inserer une personne dans la base de donnees avec une requete parametree

String query = "INSERT INTO personne (nom, prenom) VALUES (@nom, @prenom)";

MySqlCommand mySqlCommand = new MySqlCommand(query,mySqlConnection);

mySqlCommand.Parameters.AddWithValue("@nom","wick");mySqlCommand.Parameters.AddWithValue("@prenom","john");int i = mySqlCommand.ExecuteNonQuery();Console.WriteLine($"number of added persons is {i}");

H & H: Research and Training 15 / 32

Page 22: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Pour recuperer la cle primaire affectee a la derniere personne inseree

String query = "INSERT INTO personne (nom, prenom) VALUES (@nom, @prenom); select last_insert_id();";

MySqlCommand mySqlCommand = new MySqlCommand(query,mySqlConnection);

mySqlCommand.Parameters.AddWithValue("@nom","wick");mySqlCommand.Parameters.AddWithValue("@prenom","john");int i = i = Convert.ToInt32(mySqlCommand.ExecuteScalar());Console.WriteLine($"Primary key of last inserted person: {i}");

H & H: Research and Training 16 / 32

Page 23: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NETSolution avec DataSet

MySqlDataAdapter adapter = new MySqlDataAdapter();string selectQuery = "SELECT * FROM personne";MySqlCommand mySqlCommand = new MySqlCommand(selectQuery,

mySqlConnection);adapter.SelectCommand = mySqlCommand;DataSet myDataSet = new DataSet();adapter.Fill(myDataSet, "Personne");// creons un DataTable associe a la table PersonneDataTable dataTable = myDataSet.Tables["Personne"];var newRow = dataTable.NewRow();newRow["num"] = personne.Num;newRow["nom"] = personne.Nom;newRow["prenom"] = personne.Prenom;dataTable.Rows.Add(newRow);// Et pour creer un objet requetenew MySqlCommandBuilder(adapter);// appeler la methode Update pour faire les requetes INSERT, UPDATE et

DELETEint i = adapter.Update(dataTable);Console.WriteLine($"number of added persons is {i}");

H & H: Research and Training 17 / 32

Page 24: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Modifier une personne dans la base de donnees avec une requete parametree

String query = "UPDATE personne SET nom = @nom, prenom =@prenom WHERE num = @num";

MySqlCommand mySqlCommand = new MySqlCommand(query,mySqlConnection);

mySqlCommand.Parameters.AddWithValue("@nom","denzel");mySqlCommand.Parameters.AddWithValue("@prenom","washington");mySqlCommand.Parameters.AddWithValue("@num",100);int i = mySqlCommand.ExecuteNonQuery();Console.WriteLine($"number of updated persons is {i}");

H & H: Research and Training 18 / 32

Page 25: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

CRUD avec ADO.NET

ADO.NET

Supprimer une personne dans la base de donnees avec une requete parametree

String query = "DELETE FROM personne WHERE num = @num";MySqlCommand mySqlCommand = new MySqlCommand(query,

mySqlConnection);mySqlCommand.Parameters.AddWithValue("@num",100);int i = mySqlCommand.ExecuteNonQuery();Console.WriteLine($"number of deleted persons is {i}");

H & H: Research and Training 19 / 32

Page 26: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NET

Organisation du code

Placer toutes les donnees de connexion (url, nomUtilisateur,motDePasse...) dans une classe de connexion.

Pour chaque table de la base de donnees, creer un modele, uneclasse C#, ayant comme attributs les colonnes de cette table.

Placer tout le code correspondant a l’acces aux donnees (de labase de donnees) dans des nouvelles classes et interfaces quiconstitueront la couche DAO (Data Access Object).

H & H: Research and Training 20 / 32

Page 27: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NETLa classe MyConnection dans un repertoire Configurations

using MySql.Data.MySqlClient;

namespace CoursAdoDotNet.Configurations{

class MyConnection{

private static MySqlConnection mySqlConnection;private MyConnection(){

MySqlConnectionStringBuilder conn = new MySqlConnectionStringBuilder();conn.Server = "localhost";conn.UserID = "root";conn.Password = "";conn.Database = "myBase";conn.SslMode = MySqlSslMode.None;conn.Port = 3306;var connString = conn.ToString();mySqlConnection = new MySqlConnection(connString);try{

mySqlConnection.Open();}catch(MySqlException e){

mySqlConnection = null;Console.WriteLine(e.StackTrace);

}}

H & H: Research and Training 21 / 32

Page 28: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NET

La classe MyConnection (suite)

public static MySqlConnection GetConnexion(){

if (mySqlConnection == null) {new MyConnection();

}return mySqlConnection;

}public static void CloseConnection(){

if (mySqlConnection != null){

mySqlConnection.Close();mySqlConnection = null;

}}

}}

H & H: Research and Training 22 / 32

Page 29: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

La classe Personne dans un repertoire Model

namespace CoursAdoDotNet.Model{

public class Personne{

public int Num { get; set; }public String Nom { get; set; }public String Prenom { get; set; }

public Personne(){}

public Personne(String nom, String prenom){

Nom = nom;Prenom = prenom;

}

public Personne(int num, String nom, String prenom){

Num = num;Nom = nom;Prenom = prenom;

}

public override string ToString(){

return $"Numero : { Num }, Nom : { Nom }, Prenom: { Prenom }";}

}}

H & H: Research and Training 23 / 32

Page 30: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NET

L’interface IPersonne dans un repertoire Dao

namespace CoursAdoDotNet.Dao{

interface IDao<T>{

T Save(T t);T Update(T t);void Remove(T t);List<T> FindAll();T FindById(int id);

}}

H & H: Research and Training 24 / 32

Page 31: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NET

Creons une classe PersonneDao dans le repertoire Dao

namespace CoursAdoDotNet.Dao{

classe PersonneDao{}

}

H & H: Research and Training 25 / 32

Page 32: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NET

Faisons heriter la classe PersonneDao de l’interface IDao

namespace CoursAdoDotNet.Dao{

classe PersonneDao: IDao<Personne>{}

}

H & H: Research and Training 26 / 32

Page 33: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

Implementons les methodes de l’interface IDao

namespace CoursAdoDotNet.Dao{

class PersonneDao : IDao<Personne>{

public List<Personne> FindAll(){

throw new NotImplementedException();}

public Personne FindById(int id){

throw new NotImplementedException();}

public void Remove(Personne t){

throw new NotImplementedException();}

public Personne Save(Personne t){

throw new NotImplementedException();}

public Personne Update(Personne t){

throw new NotImplementedException();}

}}

H & H: Research and Training 27 / 32

Page 34: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NETImplementons la methode FindAll() dans la classe PersonneDao

namespace CoursAdoDotNet.Dao{

public class PersonneDao : IDao<Personne>{

public List<Personne> FindAll(){

MySqlDataReader result = null;List<Personne> personnes = new List<Personne>();MySqlConnection mySqlConnection = MyConnection.GetConnexion();

if (mySqlConnection != null){

string query = "SELECT * FROM personne";MySqlCommand mySqlCommand = new MySqlCommand(query, mySqlConnection);result = mySqlCommand.ExecuteReader();while (result.Read()){

personnes.Add(new Personne(Int32.Parse(result[0].ToString()), result[1].ToString(), result[2].ToString()));

}

}

result.Close();MyConnection.CloseConnection();return personnes;

}

H & H: Research and Training 28 / 32

Page 35: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

Implementons la methode save() dans la classe PersonneDao

public Personne Save(Personne personne){

int i = 0;MySqlConnection mySqlConnection = MyConnection.GetConnexion();if (mySqlConnection != null){

string query = "INSERT INTO personne (nom, prenom) VALUES (@nom, @prenom);select last_insert_id();";

MySqlCommand mySqlCommand = new MySqlCommand(query, mySqlConnection);mySqlCommand.Parameters.AddWithValue("@nom", personne.Nom);mySqlCommand.Parameters.AddWithValue("@prenom", personne.Prenom);

i = Convert.ToInt32(mySqlCommand.ExecuteScalar());personne.Num = i;MyConnection.CloseConnection();

}return personne;

}public Personne Update(Personne t){

throw new NotImplementedException();}public Personne FindById(int id){

throw new NotImplementedException();}public void Remove(Personne t){

throw new NotImplementedException();}

}}

H & H: Research and Training 29 / 32

Page 36: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NET

Le Main pour tester toutes ces classes

class Program{static void Main(string[] args){

PersonneDao personneDao = new PersonneDao();Console.WriteLine(personneDao.Save(new Personne("Sy", "

Omar")));List<Personne> personnes = personneDao.FindAll();personnes.ForEach(Console.WriteLine);Console.ReadKey();

}}

H & H: Research and Training 30 / 32

Page 37: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NET

Exercice 1

Implementer les methodes Remove, Update et FindById

H & H: Research and Training 31 / 32

Page 38: Achref El MouelhiC#: ADO.NET Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en programmation par contrainte (IA) Ingenieur en g´ enie logiciel´ elmouelhi.achref@gmail.com

© Achref EL MOUELHI ©

Restructuration du code

ADO.NET

Exercice 2

Implementer une methode FindAllByPattern(string pattern)qui retourne toutes les personnes dont le nom ou le prenom contient lachaine pattern.

H & H: Research and Training 32 / 32