- Les suppressions utilisent également
db.Execute()pour exécuter des instructionsDELETEet renvoyer le nombre de lignes affectées. - On identifie généralement l’enregistrement cible grâce à son identifiant de clé primaire unique.
- La clause
WHEREest indispensable ! Sans WHERE, l’intégralité de la table est effacée. - Mauvaise pratique : construire le SQL par concaténation de chaînes, risque d’injection SQL ; ✅ bonne pratique : requêtes paramétrées.
Note originale : la suppression d’entité se fait via un identifiant unique. La structure SQL principale est
DELETE ... WHERE ClefPrimaire=Valeur
L’exemple ci‑dessous comporte une faille d’injection SQL
// Code dangereux : concaténation de chaînes, risque d’injection SQL
using (IDbConnection db = new MySqlConnection(conn))
{
var id = 1;
string sqlQuery = "DELETE FROM student WHERE Id = " + id;
int rowsAffected = db.Execute(sqlQuery);
// Requête pour vérifier le résultat de la suppression
var info = db.Query<Student>("SELECT * FROM student WHERE Id = " + id).SingleOrDefault();
}Langage du code : C# (cs)
Implémentation paramétrée standard
using System.Data;
using MySql.Data.MySqlClient;
using Dapper;
using System.Configuration;
static void Main(string[] args)
{
var conn = ConfigurationManager.ConnectionStrings["StudentConnection"].ConnectionString;
using (IDbConnection db = new MySqlConnection(conn))
{
// Requête de suppression avec emplacements de paramètres
string sqlDelete = "DELETE FROM student WHERE Id = @Id";
int targetId = 1;
// Exécuter la suppression, transmettre les paramètres par classe anonyme
int rowsAffected = db.Execute(sqlDelete, new { Id = targetId });
// Vérification : le résultat doit être null après suppression
var student = db.Query<Student>(
"SELECT * FROM student WHERE Id = @Id",
new { Id = targetId }
).SingleOrDefault();
}
Console.ReadKey();
}
// Classe entité Student
public class Student
{
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
}Langage du code : C# (cs)
Transmettre les paramètres avec un objet entité
string sqlDelete = "DELETE FROM student WHERE Id = @Id";
var stu = new Student { Id = 1 };
int rowsAffected = db.Execute(sqlDelete, stu);Langage du code : C# (cs)
Informations complémentaires
- Signification de la valeur retournée
rowsAffected > 0: suppression réussie des lignes cibles ;rowsAffected = 0: aucun enregistrement correspondant trouvé. - Avertissement critique
DELETE FROM student;sans condition efface toute la table, ne jamais l’écrire par erreur. - Règle de sécurité
Tous les identifiants et filtres venant de l’extérieur doivent utiliser les paramètres@xxx, interdiction de concaténer des chaînes brutes.
Opération de suppression Dapper
Previous: Opération de mise à jour