Dapper 削除処理

  1. 削除処理も db.Execute() を使い、DELETE文を実行して影響を受けた行数を返します。
  2. 削除処理は通常、一意の主キーIDを使って対象レコードを特定します。
  3. WHERE句は必須です!WHEREを省略するとテーブルのデータがすべて消去されます。
  4. 悪い例:文字列連結でSQLを作成するとSQLインジェクションの危険があります;✅推奨記述:パラメータ化クエリ。

元の説明:エンティティの削除は一意のIdで識別します。SQLの基本形はDELETE ... WHERE 主キー=値です

下記コードはSQLインジェクションの脆弱性を持ちます

// 危険なコード:文字列連結によりSQLインジェクションが発生します
using (IDbConnection db = new MySqlConnection(conn))
{
    var id = 1;
    string sqlQuery = "DELETE FROM student WHERE Id = " + id;
    int rowsAffected = db.Execute(sqlQuery);

    // 削除結果を確認するためのクエリ
    var info = db.Query<Student>("SELECT * FROM student WHERE Id = " + id).SingleOrDefault();
}Code language: C# (cs)

標準的なパラメータ化記述

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))
    {
        // 削除用SQL、パラメータプレースホルダーを使用
        string sqlDelete = "DELETE FROM student WHERE Id = @Id";
        int targetId = 1;

        // 削除実行、匿名クラスでパラメータを渡す
        int rowsAffected = db.Execute(sqlDelete, new { Id = targetId });

        // 確認処理:削除後は検索結果がnullになる
        var student = db.Query<Student>(
            "SELECT * FROM student WHERE Id = @Id",
            new { Id = targetId }
        ).SingleOrDefault();
    }
    Console.ReadKey();
}

// Studentエンティティクラス
public class Student
{
    public int Id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Email { get; set; }
}Code language: C# (cs)

エンティティオブジェクトからパラメータを渡す

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

補足事項

  1. 戻り値の解説
    rowsAffected > 0:対象行の削除成功;rowsAffected = 0:条件に合致するレコードが存在しない。
  2. 重大な注意
    DELETE FROM student; 条件なしで実行するとテーブル全体が消去されます。絶対に誤って記述しないでください
  3. セキュリティルール
    外部から受け取ったIDや条件はすべて@xxxパラメータを利用し、文字列連結は禁止します。

Dapper 削除処理

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です