23
C# : connexion ` a MySQL 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] Mai - Juin 2018, M2i Aix en Provence 2018 1 / 18

C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Embed Size (px)

Citation preview

Page 1: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

C# : connexion a MySQL

Achref El Mouelhi

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

Ingenieur en Genie logiciel

[email protected]

Mai - Juin 2018, M2i Aix en Provence 2018 1 / 18

Page 2: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Plan

1 Introduction

2 Referencer MySQL dans un projet C#

3 CRUD avec MySql/C#

4 Classes connexion et DAL

Mai - Juin 2018, M2i Aix en Provence 2018 2 / 18

Page 3: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Introduction

Introduction

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

Allons telecharger (les installers .msi)

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

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

Mai - Juin 2018, M2i Aix en Provence 2018 3 / 18

Page 4: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Introduction

Introduction

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

Allons telecharger (les installers .msi)

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

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

Mai - Juin 2018, M2i Aix en Provence 2018 3 / 18

Page 5: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Introduction

Introduction

Ensuite

Installer les deux

(Re)lancer Visual Studio

Creer un nouveau projet C# (console)

Mai - Juin 2018, M2i Aix en Provence 2018 4 / 18

Page 6: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Referencer MySQL dans un projet C#

Referencer MySQL dans un projet C#

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;

Mai - Juin 2018, M2i Aix en Provence 2018 5 / 18

Page 7: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Referencer MySQL dans un projet C#

Referencer MySQL dans un projet C#

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;

Mai - Juin 2018, M2i Aix en Provence 2018 5 / 18

Page 8: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Referencer MySQL dans un projet C#

Referencer MySQL dans un projet C#

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;

Mai - Juin 2018, M2i Aix en Provence 2018 5 / 18

Page 9: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

CRUD avec MySql/C#

CRUD avec MySql/C#

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)

Mai - Juin 2018, M2i Aix en Provence 2018 6 / 18

Page 10: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

CRUD avec MySql/C#

CRUD avec MySql/C#

Construire la chaıne de connexion

MySqlConnectionStringBuilder conn = newMySqlConnectionStringBuilder();

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 = newMySqlConnection(connString);

mySqlConnection.Open();

Mai - Juin 2018, M2i Aix en Provence 2018 7 / 18

Page 11: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

CRUD avec MySql/C#

CRUD avec MySql/C#

Construire la chaıne de connexion

MySqlConnectionStringBuilder conn = newMySqlConnectionStringBuilder();

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 = newMySqlConnection(connString);

mySqlConnection.Open();

Mai - Juin 2018, M2i Aix en Provence 2018 7 / 18

Page 12: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

CRUD avec MySql/C#

CRUD avec MySql/C#

Preparer la commande

MySqlCommand mySqlCommand = new MySqlCommand("select

* from personne", mySqlConnection);

Executer la commande et recuperer le resultat (lecture)

MySqlDataReader result = mySqlCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

while (result.Read()){Console.WriteLine(string.Format("{0} : {1} : {2} "

, result[0], result[1], result[2]));}

Mai - Juin 2018, M2i Aix en Provence 2018 8 / 18

Page 13: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

CRUD avec MySql/C#

CRUD avec MySql/C#

Preparer la commande

MySqlCommand mySqlCommand = new MySqlCommand("select

* from personne", mySqlConnection);

Executer la commande et recuperer le resultat (lecture)

MySqlDataReader result = mySqlCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

while (result.Read()){Console.WriteLine(string.Format("{0} : {1} : {2} "

, result[0], result[1], result[2]));}

Mai - Juin 2018, M2i Aix en Provence 2018 8 / 18

Page 14: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

CRUD avec MySql/C#

CRUD avec MySql/C#

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

String sqlRequest = "insert into personne (num, nom, prenom)values(@num, @nom, @prenom)";

MySqlCommand mySqlCommand = new MySqlCommand(sqlRequest,mySqlConnection);

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

Mai - Juin 2018, M2i Aix en Provence 2018 9 / 18

Page 15: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

CRUD avec MySql/C#

CRUD avec MySql/C#

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

String sqlRequest = "update personne set nom =@nom, prenom =@prenom where num = @num";

MySqlCommand mySqlCommand = new MySqlCommand(sqlRequest,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}");

Mai - Juin 2018, M2i Aix en Provence 2018 10 / 18

Page 16: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

CRUD avec MySql/C#

CRUD avec MySql/C#

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

String sqlRequest = "delete from personne where num = @num";MySqlCommand mySqlCommand = new MySqlCommand(sqlRequest,

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

Mai - Juin 2018, M2i Aix en Provence 2018 11 / 18

Page 17: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Classes connexion et DAL

Organisation du code

Organisation du code

Il faut mettre toutes les donnees (url, nomUtilisateur,motDePasse...) relatives a notre connexion dans une classeconnexion

Pour chaque table de la base de donnees, on cree un modele,une classe C#, ayant comme attributs les colonnes de cette table

Il faut mettre tout le code correspondant a l’acces aux donnees(de la base de donnees) dans des nouvelles classes et interfacesqui constitueront la couche DAL : Data Access Layer (DAO enJava)

Mai - Juin 2018, M2i Aix en Provence 2018 12 / 18

Page 18: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Classes connexion et DAL

Organisation du codeLa classe MyConnexion

using MySql.Data.MySqlClient;

namespace MyProject {class MyConnexion {

private static MySqlConnection mySqlConnection;private MyConnexion() {

MySqlConnectionStringBuilder conn = new MySqlConnectionStringBuilder();conn.Server = "localhost";conn.UserID = "root";conn.Password = "";conn.Database = "jdbc";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);

}}public static MySqlConnection GetConnexion() {

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

}return mySqlConnection;

}}

}

Mai - Juin 2018, M2i Aix en Provence 2018 13 / 18

Page 19: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Classes connexion et DAL

Organisation du codeLa classe Personne dans un repertoire model

namespace MyProject{

public class Personne{

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 int Num { get; set; }public String Nom { get; set; }public String Prenom { get; set; }

}}

Mai - Juin 2018, M2i Aix en Provence 2018 14 / 18

Page 20: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Classes connexion et DAL

Organisation du code

L’interface IPersonne

namespace MyProject{

public interface IPersonne{

int Save(Personne personne);int Update(Personne personne);int Delete(int id);List<Personne> FindAll();Personne FindById(int id);

}}

Mai - Juin 2018, M2i Aix en Provence 2018 15 / 18

Page 21: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Classes connexion et DAL

Organisation du code

La classe PersonneRepository

namespace MyProject{

public class PersonneRepository : IPersonne{

public List<Personne> FindAll(){

List<Personne> personnes = new List<Personne>();MySqlConnection mySqlConnection = MyConnexion.GetConnexion();if (mySqlConnection != null){

MySqlCommand mySqlCommand = new MySqlCommand("select * from personne",mySqlConnection);

MySqlDataReader result = mySqlCommand.ExecuteReader(System.Data.CommandBehavior.CloseConnection);

while (result.Read()){

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

}mySqlConnection.Close();

}return personnes;

}

Mai - Juin 2018, M2i Aix en Provence 2018 16 / 18

Page 22: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Classes connexion et DAL

Organisation du codeLa classe PersonneRepository (suite)

public int Save(Personne personne){

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

string sqlRequest = "insert into personne values(@num, @nom,@prenom)";MySqlCommand mySqlCommand = new MySqlCommand(sqlRequest, mySqlConnection);mySqlCommand.Parameters.AddWithValue("@num", personne.Num);mySqlCommand.Parameters.AddWithValue("@nom", personne.Nom);mySqlCommand.Parameters.AddWithValue("@prenom", personne.Prenom);i = mySqlCommand.ExecuteNonQuery();mySqlConnection.Close();

}return i;

}public int Update(Personne personne){

throw new NotImplementedException();}

public Personne FindById(int id){

throw new NotImplementedException();}public int Delete(int id){

throw new NotImplementedException();}

}}

Mai - Juin 2018, M2i Aix en Provence 2018 17 / 18

Page 23: C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de l’universite d’Aix-Marseille´ Chercheur en Programmation par contrainte (IA) Ingenieur

Classes connexion et DAL

Organisation du code

Le Main pour tester toutes ces classes

class Program{static void Main(string[] args){PersonneRepository personneRepository = new

PersonneRepository();List<Personne> personnes = personneRepository.FindAll();personnes.ForEach(personne => Console.WriteLine(personne.

Nom + " " + personne.Prenom));Console.WriteLine("Fin");

}}

Mai - Juin 2018, M2i Aix en Provence 2018 18 / 18