Aktualisierungsvorgang

  1. Für Aktualisierungen in Dapper wird die Methode Execute() verwendet, um UPDATE‑SQL‑Anweisungen auszuführen; sie gibt die Anzahl betroffener Zeilen zurück.
  2. Eine WHERE‑Bedingung ist zwingend erforderlich, sonst werden sämtliche Datensätze der Tabelle aktualisiert!
  3. Nicht empfohlen: SQL‑Erstellung per String‑Verkettung (einfache Variante im Ausgangstext). Dies erzeugt eine SQL‑Injektions‑Sicherheitslücke.
  4. 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 mit WHERE, 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)
  1. WHERE‑Bedingung ist unbedingt nötig
    Fehlt WHERE, entsteht UPDATE student SET xxx und die gesamte Tabelle wird überschrieben – das führt zu schwerwiegenden Datenfehlern.
  2. Exakte Parameter‑Namensübereinstimmung
    Groß‑/Kleinschreibung spielt zwischen SQL‑@Parametername und Entity‑/anonymen‑Klasseneigenschaften keine Rolle, die Namen selbst müssen übereinstimmen.
  3. Bedeutung des Rückgabewerts
    int rowsAffected: Wert größer 0 bedeutet erfolgreich aktualisierte Zeilen; Wert 0 bedeutet, dass keine passenden Datensätze gefunden wurden.
  4. 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

Schreibe einen Kommentar

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