- 削除処理も
db.Execute()を使い、DELETE文を実行して影響を受けた行数を返します。 - 削除処理は通常、一意の主キーIDを使って対象レコードを特定します。
WHERE句は必須です!WHEREを省略するとテーブルのデータがすべて消去されます。- 悪い例:文字列連結で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)
補足事項
- 戻り値の解説
rowsAffected > 0:対象行の削除成功;rowsAffected = 0:条件に合致するレコードが存在しない。 - 重大な注意
DELETE FROM student;条件なしで実行するとテーブル全体が消去されます。絶対に誤って記述しないでください。 - セキュリティルール
外部から受け取ったIDや条件はすべて@xxxパラメータを利用し、文字列連結は禁止します。
Dapper 削除処理
Previous: 更新処理
Next: Dapper ストアドプロシージャ