C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de...

Preview:

Citation preview

C# : connexion a MySQL

Achref El Mouelhi

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

Ingenieur en Genie logiciel

elmouelhi.achref@gmail.com

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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