- 刪除作業同樣使用
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 預存程序