Dapper Löschvorgang

  1. Löschvorgänge nutzen ebenfalls db.Execute() zum Ausführen von DELETE‑Anweisungen und geben die Anzahl betroffener Zeilen zurück.
  2. Zum Löschen wird meist über die eindeutige Primärschlüssel‑ID auf den Datensatz zugegriffen.
  3. Eine WHERE‑Bedingung ist zwingend erforderlich! Fehlt WHERE, wird die gesamte Tabelle geleert.
  4. Schlechte Praxis: SQL per String‑Verkettung bauen, erzeugt SQL‑Injektionsgefahr;✅Empfohlene Schreibweise: parametrisierte Abfragen.

Originalhinweis: Das Löschen von Entitäten erfolgt über eine eindeutige Id. Der SQL‑Grundaufbau lautet DELETE ... WHERE Primärschlüssel=Wert

Das folgende Beispiel birgt eine SQL‑Injektions‑Sicherheitslücke

// Gefährlicher Code: String‑Verkettung birgt SQL‑Injektionsrisiko
using (IDbConnection db = new MySqlConnection(conn))
{
    var id = 1;
    string sqlQuery = "DELETE FROM student WHERE Id = " + id;
    int rowsAffected = db.Execute(sqlQuery);

    // Abfrage zur Prüfung des Löschergebnisses
    var info = db.Query<Student>("SELECT * FROM student WHERE Id = " + id).SingleOrDefault();
}Code-Sprache: C# (cs)

Standard‑parametrisierte Schreibweise

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))
    {
        // Lösch‑SQL mit Parameter‑Platzhaltern
        string sqlDelete = "DELETE FROM student WHERE Id = @Id";
        int targetId = 1;

        // Löschvorgang ausführen, Parameter über anonyme Klasse übergeben
        int rowsAffected = db.Execute(sqlDelete, new { Id = targetId });

        // Prüfung: Nach Löschung soll das Ergebnis null sein
        var student = db.Query<Student>(
            "SELECT * FROM student WHERE Id = @Id",
            new { Id = targetId }
        ).SingleOrDefault();
    }
    Console.ReadKey();
}

// Student Entity‑Klasse
public class Student
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}Code-Sprache: C# (cs)

Parameter per Entity‑Objekt übergeben

string sqlDelete = "DELETE FROM student WHERE Id = @Id";
var stu = new Student { Id = 1 };
int rowsAffected = db.Execute(sqlDelete, stu);Code-Sprache: C# (cs)

Hinweise

  1. Bedeutung des Rückgabewerts
    rowsAffected > 0: Zielzeilen erfolgreich gelöscht;rowsAffected = 0: keine passenden Datensätze gefunden.
  2. Warnung vor hohem Risiko
    DELETE FROM student; ohne Bedingung leert die gesamte Tabelle, niemals versehentlich schreiben.
  3. Sicherheitsvorgabe
    Alle von außen kommenden IDs und Filterbedingungen müssen über @xxx‑Parameter übergeben werden, String‑Verkettung ist verboten.

Dapper Löschvorgang

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert