Travailler avec la base de données MySQL dans C#
1. Introduction
Dans ce document je vais vous donners des instructions de la manipulation avec MySQL la base de données de C#, des objectifs sont:
- Requêter
- Insérer
- Mettre à jour
- Effacer
- Appeler la fonction et la procédure de C#,...
Ce document utilise SIMPLEHR, une Database Schema l'exemple est utilisé dans plusieurs publications sur o7planning.org, vous pouvez créer ce schéma sur Oracle, MySQL ou SQL Server. Vous pouvez voir des instructions à:
2. Connecter à C# dans MySql Database
Créez le projet CsMySQLTutorial:
Le projet est créé.
Vous devez déclarer les bibliothèques MySQL et avez besoin d'une classe d'utilitaire (DBUtils.cs) qui aide à connecter à la base de données. Avec MySQL Database, vous pouvewz voir des instructions à:
DBMySQLUtils.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace Tutorial.SqlConn
{
class DBMySQLUtils
{
public static MySqlConnection
GetDBConnection(string host, int port, string database, string username, string password)
{
// Connection String.
String connString = "Server=" + host + ";Database=" + database
+ ";port=" + port + ";User Id=" + username + ";password=" + password;
MySqlConnection conn = new MySqlConnection(connString);
return conn;
}
}
}
DBUtils.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
namespace Tutorial.SqlConn
{
class DBUtils
{
public static MySqlConnection GetDBConnection()
{
string host = "192.168.205.130";
int port = 3306;
string database = "simplehr";
string username = "root";
string password = "1234";
return DBMySQLUtils.GetDBConnection(host, port, database, username, password);
}
}
}
3. MySqlCommand
Dans C# pour manipuler avec MySQL Database, par exemple requêter, insérer, mettre à jour, effacer vous devez utiliser un objet MySqlCommand, MySqlCommand qui est une classe étendue de DbCommand. Au cas où, vous devez requêter, insérer, mettre à jour, ou effacer dans Oracle Database, vous devez utiliser OracleCommand, ou avec SQL Server est SqlCommand. Ce sera difficile si vous utilisez un code de ressource pour différentes bases de données.
Vous pouvez créer l'objet MySqlCommand afin de manipuler avec MySQL Database:
MySqlConnection conn = DBUtils.GetDBConnection();
// Way 1:
// Create a command associated with the Connection.
MySqlCommand cmd = conn.CreateCommand();
// Set Command Text
cmd.CommandText = sql;
// Way 2 :
// Create a Command
MySqlCommand cmd = new MySqlCommand(sql);
// Set connection for command.
cmd.Connection = conn;
// Way 3:
// Create a command associated with the Connection.
MySqlCommand cmd = new MySqlCommand(sql, conn);
4. Requêter
Par exemple, requêtez des données qui utilisent C#.
QueryDataExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tutorial.SqlConn;
using System.Data.Common;
using MySql.Data.MySqlClient;
namespace CsMySQLTutorial
{
class QueryDataExample
{
static void Main(string[] args)
{
// Obtenez de l'objet Connection qui se connecte à DB.
MySqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
try
{
QueryEmployee(conn);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
Console.WriteLine(e.StackTrace);
}
finally
{
// Terminez la connexion.
conn.Close();
// Disposez un objet, libérez des ressources.
conn.Dispose();
}
Console.Read();
}
private static void QueryEmployee(MySqlConnection conn)
{
string sql = "Select Emp_Id, Emp_No, Emp_Name, Mng_Id from Employee";
// Créez un objet Command.
MySqlCommand cmd = new MySqlCommand();
// Établissez la connexion de la commande.
cmd.Connection = conn;
cmd.CommandText = sql;
using (DbDataReader reader = cmd.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
// Récupérez l'indexe (index) de colonne Emp_ID dans l'instruction de requête SQL.
int empIdIndex = reader.GetOrdinal("Emp_Id"); // 0
long empId = Convert.ToInt64(reader.GetValue(0));
// La colonne Emp_No a l'indexe = 1.
string empNo = reader.GetString(1);
int empNameIndex = reader.GetOrdinal("Emp_Name");// 2
string empName = reader.GetString(empNameIndex);
// Index (index) de la colonne Mng_Id dans l'instructions de requête SQL.
int mngIdIndex = reader.GetOrdinal("Mng_Id");
long? mngId = null;
// Si une colonne est nullable, vérifiez toujours DBNull ...
if (!reader.IsDBNull(mngIdIndex))
{
mngId = Convert.ToInt64(reader.GetValue(mngIdIndex));
}
Console.WriteLine("--------------------");
Console.WriteLine("empIdIndex:" + empIdIndex);
Console.WriteLine("EmpId:" + empId);
Console.WriteLine("EmpNo:" + empNo);
Console.WriteLine("EmpName:" + empName);
Console.WriteLine("MngId:" + mngId);
}
}
}
}
}
}
Exécution l'exemple:
--------------------
empIdIndex:0
EmpId:7369
EmpNo:E7369
EmpName:SMITH
MngId:7902
--------------------
empIdIndex:0
EmpId:7499
EmpNo:E7499
EmpName:ALLEN
MngId:7698
--------------------
empIdIndex:0
EmpId:7521
EmpNo:E7521
EmpName:WARD
MngId:7698
--------------------
empIdIndex:0
EmpId:7566
EmpNo:E7566
EmpName:JONES
MngId:7839
.....
Remarque: L'instruction using est utilisé pour assurer que l'objet est éliminé (dispose) dès qu'il sort du champ, et elle ne demande pas des codes implicites afin d'assurer ce qu'il se passe.// Utilisez le mot-clé 'using' pour les objets IDispose. // (Est l'objet de l'Interface IDispose). using (DbDataReader reader = cmd.ExecuteReader()) { // Le code utilise un lecteur. } // Équivalent à l'écriture traditionnelle. DbDataReader reader = cmd.ExecuteReader(); try { // Le code utilise un lecteur. } finally { // Appelez la méthode pour jeter un objet // Libérez des ressources. reader.Dispose(); }
5. Insérer des données:
L'exemple ci- dessous insère un record (record) dans la table Salary_Grade.
InsertDataExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tutorial.SqlConn;
using System.Data.Common;
using System.Data;
using MySql.Data.MySqlClient;
namespace CsMySQLTutorial
{
class InsertDataExample
{
static void Main(string[] args)
{
// Étabilissez de la connexion à la base de données.
MySqlConnection connection = DBUtils.GetDBConnection();
connection.Open();
try
{
// La commande Insert.
string sql = "Insert into Salary_Grade (Grade, High_Salary, Low_Salary) "
+ " values (@grade, @highSalary, @lowSalary) ";
MySqlCommand cmd = connection.CreateCommand();
cmd.CommandText = sql;
// Créez un objet Paramètre.
MySqlParameter gradeParam = new MySqlParameter("@grade",SqlDbType.Int);
gradeParam.Value = 3;
cmd.Parameters.Add(gradeParam);
// Ajoutez le paramètre @highSalary (Écrire plus court).
MySqlParameter highSalaryParam = cmd.Parameters.Add("@highSalary", SqlDbType.Float);
highSalaryParam.Value = 20000;
// Ajoutez le paramètre @lowSalary (Écrire plus court).
cmd.Parameters.Add("@lowSalary", SqlDbType.Float ).Value = 10000;
// Exécutez la Commande (Utilisez pour supprimer, insérer, mettre à jour).
int rowCount = cmd.ExecuteNonQuery();
Console.WriteLine("Row Count affected = " + rowCount);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
Console.WriteLine(e.StackTrace);
}
finally
{
connection.Close();
connection.Dispose();
connection = null;
}
Console.Read();
}
}
}
Exécutez l'exemple :
Row Count affected = 1
6. Mettre à jour des données
Par exemple, mettre à jour dans C#.
UpdateExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using Tutorial.SqlConn;
using System.Data;
namespace CsMySQLTutorial
{
class UpdateExample
{
static void Main(string[] args)
{
MySqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
try
{
string sql = "Update Employee set Salary = @salary where Emp_Id = @empId";
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
// Ajoutez et définissez de la valeur pour le paramètre.
cmd.Parameters.Add("@salary", SqlDbType.Float).Value = 850;
cmd.Parameters.Add("@empId", SqlDbType.Decimal).Value = 7369;
// Exécutez la commande (Ca sert à supprimer, à insérer et à mettre à jour).
int rowCount = cmd.ExecuteNonQuery();
Console.WriteLine("Row Count affected = " + rowCount);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
Console.WriteLine(e.StackTrace);
}
finally
{
conn.Close();
conn.Dispose();
conn = null;
}
Console.Read();
}
}
}
Exécutez l'exemple:
Row Count affected = 1
7. Effacer des données
Par exemple, utilisez C# effacer dé données dans MySQL.
DeleteExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using Tutorial.SqlConn;
using System.Data;
namespace CsMySQLTutorial
{
class DeleteExample
{
static void Main(string[] args)
{
// Obtenez une connexion à la base de données.
MySqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
try
{
string sql = "Delete from Salary_Grade where Grade = @grade ";
// Créez l'objet Command.
MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandText = sql;
cmd.Parameters.Add("@grade", SqlDbType.Int).Value = 3;
// Exécutez Command (Utilisez pour supprimer, insérer, mettre à jour).
int rowCount = cmd.ExecuteNonQuery();
Console.WriteLine("Row Count affected = " + rowCount);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
Console.WriteLine(e.StackTrace);
}
finally
{
conn.Close();
conn.Dispose();
conn = null;
}
Console.Read();
}
}
}
8. Appeler des procédures dans C#
Vous devez créer une simple procédure dans MySQL et l'appeler dans C#:
Get_Employee_Info
DELIMITER $$
-- This procedure retrieves information of an employee,
-- Input parameter: p_Emp_ID (Integer)
-- There are four output parameters v_Emp_No, v_First_Name, v_Last_Name, v_Hire_Date
CREATE PROCEDURE get_Employee_Info(p_Emp_ID Integer,
out v_Emp_No Varchar(50) ,
out v_First_Name Varchar(50) ,
Out v_Last_name Varchar(50) ,
Out v_Hire_date Date)
BEGIN
set v_Emp_No = concat( 'E' , Cast(p_Emp_Id as char(15)) );
--
set v_First_Name = 'Michael';
set v_Last_Name = 'Smith';
set v_Hire_date = curdate();
END
CallProcedureExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tutorial.SqlConn;
using System.Data;
using MySql.Data.MySqlClient;
namespace CsMySQLTutorial
{
class CallProcedureExample
{
// Get_Employee_Info
// @p_Emp_Id Integer ,
// @v_Emp_No Varchar(50) OUTPUT
// @v_First_Name Varchar(50) OUTPUT
// @v_Last_Name Varchar(50) OUTPUT
// @v_Hire_Date Date OUTPUT
static void Main(string[] args)
{
MySqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
try
{
// Créez un objet Command pour appeler la procédure Get_Employee_Info.
MySqlCommand cmd = new MySqlCommand("Get_Employee_Info", conn);
// Définissez le type de Command ếtant StoredProcedure.
cmd.CommandType = CommandType.StoredProcedure;
// Ajoutez le paramètre @p_Emp_Id et définissez de sa valeur = 100.
cmd.Parameters.Add("@p_Emp_Id", SqlDbType.Int).Value =100;
// Ajoutez le paramètre @v_Emp_No le type Varchar(20).
cmd.Parameters.Add(new MySqlParameter("@v_Emp_No", MySqlDbType.VarChar, 20));
cmd.Parameters.Add(new MySqlParameter("@v_First_Name", MySqlDbType.VarChar, 50));
cmd.Parameters.Add(new MySqlParameter("@v_Last_Name", MySqlDbType.VarChar, 50));
cmd.Parameters.Add(new MySqlParameter("@v_Hire_Date", MySqlDbType.Date));
// Le paramètre de registre @v_Emp_No est OUTPUT.
cmd.Parameters["@v_Emp_No"].Direction = ParameterDirection.Output;
cmd.Parameters["@v_First_Name"].Direction = ParameterDirection.Output;
cmd.Parameters["@v_Last_Name"].Direction = ParameterDirection.Output;
cmd.Parameters["@v_Hire_Date"].Direction = ParameterDirection.Output;
// Exécutez la procédure.
cmd.ExecuteNonQuery();
// Obtenez des valeurs de sortie.
string empNo = cmd.Parameters["@v_Emp_No"].Value.ToString();
string firstName = cmd.Parameters["@v_First_Name"].Value.ToString();
string lastName = cmd.Parameters["@v_Last_Name"].Value.ToString();
DateTime hireDate = (DateTime)cmd.Parameters["@v_Hire_Date"].Value;
Console.WriteLine("Emp No: " + empNo);
Console.WriteLine("First Name: " + firstName);
Console.WriteLine("Last Name: " + lastName);
Console.WriteLine("Hire Date: " + hireDate);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
Console.WriteLine(e.StackTrace);
}
finally
{
conn.Close();
conn.Dispose();
}
Console.Read();
}
}
}
Exécutez l'exemple :
Emp No: E100
First Name: Michael
Last Name: Smith
Hire Date: 2/11/2016 12:00:00 AM
9. Appeler une fonction dans C#
Vous devez créer une simple fonction et l'appeler dans C#.
Get_Emp_No
DROP function if Exists `Get_Emp_No`;
-- When programming the function / procedure you need to use semicolon
-- to separate the different commands.
-- Use DELIMITER $$ to allow use of semicolons.
DELIMITER $$
CREATE Function Get_Emp_No (p_Emp_Id Integer) Returns Varchar(50)
Begin
return concat('E', CAST(p_Emp_Id as char)) ;
END;
CallFunctionExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tutorial.SqlConn;
using System.Data;
using MySql.Data.MySqlClient;
namespace CsMySQLTutorial
{
class CallFunctionExample
{
// Function: Get_Emp_No
// Parameter: @p_Emp_Id Integer
static void Main(string[] args)
{
MySqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
try
{
// Créez un objet Command pour appeler la fonction Get_Emp_No.
MySqlCommand cmd = new MySqlCommand("Get_Emp_No", conn);
// CommandType est StoredProcedure
cmd.CommandType = CommandType.StoredProcedure;
// Ajoutez le paramètre @p_Emp_Id et définissez Value = 100.
cmd.Parameters.AddWithValue("@p_Emp_Id", MySqlDbType.Int32).Value = 100;
// Créez l'objet MySqlParameter,
// pour stocker la valeur de retour lors de l'appel de la fonction.
MySqlParameter resultParam = new MySqlParameter("@Result", MySqlDbType.VarChar);
resultParam.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(resultParam);
// Appelez la fonction.
cmd.ExecuteNonQuery();
string empNo = null;
if (resultParam.Value != DBNull.Value)
{
empNo = (string)resultParam.Value;
}
Console.WriteLine("Emp No: " + empNo);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
Console.WriteLine(e.StackTrace);
}
finally
{
conn.Close();
conn.Dispose();
}
Console.Read();
}
}
}
Exécutez l'exemple:
Emp No: E100
10. ExecuteScalar
MySqlCommand.ExecuteScalar() est une méthode qui utilise à exécuter l'instruction SQL et renvoie la valeur de la première colonne de la première ligne dans des résultats de l'instruction SQL.
-- L'instruction suivante renvoie une seule valeur.
--
Select count(*) from Employee;
-- Ou
Select Max(e.Salary) From Employee e;
Exemple:
ExecuteScalarExample.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using System.Data;
using Tutorial.SqlConn;
namespace CsMySQLTutorial
{
class ExecuteScalarExample
{
static void Main(string[] args)
{
MySqlConnection conn = DBUtils.GetDBConnection();
conn.Open();
try
{
MySqlCommand cmd = new MySqlCommand("Select count(*) From Employee", conn);
cmd.CommandType = CommandType.Text;
// La méthode ExecuteScalar renvoie la valeur de la première colonne sur la première ligne.
object countObj = cmd.ExecuteScalar();
int count = 0;
if (countObj != null)
{
count = Convert.ToInt32(countObj);
}
Console.WriteLine("Emp Count: " + count);
}
catch (Exception e)
{
Console.WriteLine("Error: " + e);
Console.WriteLine(e.StackTrace);
}
finally
{
conn.Close();
conn.Dispose();
}
Console.Read();
}
}
}
Exécutez de l'exemple:
Emp Count: 14
Vous pouvez appeler une fonction de MySQL en utilisant la méthode ExecuteScalar, observez l'exemple suivant:
Tutoriels de programmation C#
- Héritage et polymorphisme en C#
- De quoi avez-vous besoin pour démarrer avec C#?
- Apprenez rapidement à développer en C# pour débutant
- Installer Visual Studio 2013 sur Windows
- Classe abstraite et interface dans C#
- Installer Visual Studio 2015 sur Windows
- Compression et décompression dans C#
- Tutoriel de programmation multithread C#
- Tutoriel C# Delegate et Event
- Installer AnkhSVN sur Windows
- Programmation C# pour l'équipe utilisant Visual Studio et SVN
- Installer .Net Framework
- Modificateur d'accès (Access Modifier) en C#
- Le Tutoriel de C# String et de StringBuilder
- Le Tutoriel de C# Properties
- Le Tutoriel de C# Enum
- Le Tutoriel de C# Structure
- Le Tutoriel de C# Generics
- Tutoriel sur la gestion des exceptions C#
- Le Tutoriel de C# Date Time
- Manipulation de fichiers et de répertoires dans C#
- Tutoriel C# Stream - flux binaire en C#
- Le Tutoriel d'expressions régulières C#
- Se Connecter à la base de données SQL Server dans C#
- Travailler avec la base de données SQL Server dans C#
- Connectez-vous à la base de données MySQL dans C#
- Travailler avec la base de données MySQL dans C#
- Connectez-vous à la base de données Oracle dans CSharp sans Oracle Client
- Utilisation d'une base de données Oracle en utilisant C#
Show More