C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de...
-
Upload
trinhquynh -
Category
Documents
-
view
237 -
download
4
Transcript of C# : connexion à MySQL - lsis.org · C# : connexion a MySQL` Achref El Mouelhi Docteur de...
C# : connexion a MySQL
Achref El Mouelhi
Docteur de l’universite d’Aix-MarseilleChercheur en Programmation par contrainte (IA)
Ingenieur en Genie logiciel
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