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 삭제 작업

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다