- Löschvorgänge nutzen ebenfalls
db.Execute()zum Ausführen vonDELETE‑Anweisungen und geben die Anzahl betroffener Zeilen zurück. - Zum Löschen wird meist über die eindeutige Primärschlüssel‑ID auf den Datensatz zugegriffen.
- Eine
WHERE‑Bedingung ist zwingend erforderlich! Fehlt WHERE, wird die gesamte Tabelle geleert. - 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
- Bedeutung des Rückgabewerts
rowsAffected > 0: Zielzeilen erfolgreich gelöscht;rowsAffected = 0: keine passenden Datensätze gefunden. - Warnung vor hohem Risiko
DELETE FROM student;ohne Bedingung leert die gesamte Tabelle, niemals versehentlich schreiben. - Sicherheitsvorgabe
Alle von außen kommenden IDs und Filterbedingungen müssen über@xxx‑Parameter übergeben werden, String‑Verkettung ist verboten.
Dapper Löschvorgang
Previous: Aktualisierungsvorgang