- Für Aktualisierungen in Dapper wird die Methode
Execute()verwendet, umUPDATE‑SQL‑Anweisungen auszuführen; sie gibt die Anzahl betroffener Zeilen zurück. - Eine
WHERE‑Bedingung ist zwingend erforderlich, sonst werden sämtliche Datensätze der Tabelle aktualisiert! - Nicht empfohlen: SQL‑Erstellung per String‑Verkettung (einfache Variante im Ausgangstext). Dies erzeugt eine SQL‑Injektions‑Sicherheitslücke.
- Empfohlen: parametrisierte Abfragen mit
@Parametername, kombiniert mit Entity‑ oder anonymen Klassen für automatisches Mapping.
Originalhinweis: Das Vorgehen beim Aktualisieren ähnelt dem Einfügen. Schreiben Sie eine
UPDATE‑SQL‑Anweisung und beschränken Sie mitWHERE, welche Zeilen geändert werden.
Beispiel
// Gefährlicher Code! String‑Verkettung birgt SQL‑Injektionsgefahr, dient nur als schlechtes Beispiel
using (IDbConnection db = new MySqlConnection(conn))
{
var id = 1;
string sqlUpdate = "UPDATE student set FirstName='NeuerVorname',LastName='NeuerNachname',Email='NeueMail' WHERE Id=" + id;
int rows = db.Execute(sqlUpdate);
var info = db.Query<Student>("Select * From student WHERE Id=" + id, new { 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))
{
// 1.Update‑SQL mit @‑Parameter‑Platzhaltern
string sqlUpdate = @"UPDATE student
SET FirstName=@FirstName, LastName=@LastName, Email=@Email
WHERE Id=@Id";
// 2.Update‑Daten mit einem Entity‑Objekt zusammenbauen
var stu = new Student()
{
Id = 1,
FirstName = "foxdevelop",
LastName = "com",
Email = "admin@foxdevelop.com"
};
// 3.Aktualisierung ausführen, Anzahl betroffener Zeilen ermitteln
int rowsAffected = db.Execute(sqlUpdate, stu);
// 4.Abfrage zur Prüfung des Ergebnisses
var studentInfo = db.Query<Student>(
"SELECT * FROM student WHERE Id=@Id",
new { Id = 1 }
).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)
- WHERE‑Bedingung ist unbedingt nötig
FehltWHERE, entstehtUPDATE student SET xxxund die gesamte Tabelle wird überschrieben – das führt zu schwerwiegenden Datenfehlern. - Exakte Parameter‑Namensübereinstimmung
Groß‑/Kleinschreibung spielt zwischen SQL‑@Parameternameund Entity‑/anonymen‑Klasseneigenschaften keine Rolle, die Namen selbst müssen übereinstimmen. - Bedeutung des Rückgabewerts
int rowsAffected: Wert größer 0 bedeutet erfolgreich aktualisierte Zeilen; Wert 0 bedeutet, dass keine passenden Datensätze gefunden wurden. - Sicherheitshinweis
Bauen Sie SQL‑Anweisungen niemals durch einfache String‑Verkettung auf. Externe Eingaben können SQL‑Injektions‑Angriffe ermöglichen.
Nur einzelne Felder aktualisieren
Wenn Sie nur die E‑Mail‑Adresse ändern möchten, müssen Sie nicht alle Spalten angeben:
UPDATE student SET Email=@Email WHERE Id=@Id
Aktualisierungsvorgang
Previous: Einfügen
Next: Dapper Löschvorgang