Opération de suppression Dapper

  1. Les suppressions utilisent également db.Execute() pour exécuter des instructions DELETE et renvoyer le nombre de lignes affectées.
  2. On identifie généralement l’enregistrement cible grâce à son identifiant de clé primaire unique.
  3. La clause WHERE est indispensable ! Sans WHERE, l’intégralité de la table est effacée.
  4. 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

  1. Signification de la valeur retournée
    rowsAffected > 0 : suppression réussie des lignes cibles ; rowsAffected = 0 : aucun enregistrement correspondant trouvé.
  2. Avertissement critique
    DELETE FROM student; sans condition efface toute la table, ne jamais l’écrire par erreur.
  3. 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

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *