- Dapper 업데이트는
Execute()메서드를 사용해UPDATESQL을 실행하고 영향받은 행 수를 반환합니다. WHERE조건은 반드시 추가해야 합니다. 빼면 테이블 전체 데이터가 모두 갱신됩니다!- 권장하지 않음: 문자열 연결로 SQL을 만드는 방식(원본 예시). SQL 인젝션 취약점이 발생합니다.
- 권장 방식: 매개변수화 쿼리.
@매개변수이름을 사용하고 엔티티 또는 익명 클래스로 자동 매핑합니다.
원문 설명: 업데이트 로직은 삽입과 유사합니다.
UPDATESQL문을 작성한 뒤WHERE로 수정 대상 행만 제한합니다.
예제
// 위험한 코드! 문자열 연결로 SQL 인젝션 위험이 존재, 잘못된 예시로만 사용
using (IDbConnection db = new MySqlConnection(conn))
{
var id = 1;
string sqlUpdate = "UPDATE student set FirstName='새이름',LastName='새성',Email='새메일' WHERE Id=" + id;
int rows = db.Execute(sqlUpdate);
var info = db.Query<Student>("Select * From student WHERE Id=" + id, new { 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))
{
// 1.업데이트 SQL, @매개변수 자리표시자 사용
string sqlUpdate = @"UPDATE student
SET FirstName=@FirstName, LastName=@LastName, Email=@Email
WHERE Id=@Id";
// 2.업데이트 데이터를 엔티티 객체로 구성
var stu = new Student()
{
Id = 1,
FirstName = "foxdevelop",
LastName = "com",
Email = "admin@foxdevelop.com"
};
// 3.업데이트 실행, 영향받은 행 수 반환
int rowsAffected = db.Execute(sqlUpdate, stu);
// 4.조회로 업데이트 결과 검증
var studentInfo = db.Query<Student>(
"SELECT * FROM student WHERE Id=@Id",
new { Id = 1 }
).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)
- WHERE 조건은 필수
WHERE를 빼면UPDATE student SET xxx가 되어 테이블 전체 데이터가 수정되어 큰 사고가 발생합니다. - 매개변수 이름 일치
SQL의@매개변수이름과 엔티티·익명 클래스 속성은 대소문자를 구분하지 않지만 이름 자체는 동일해야 합니다. - 반환값 의미
int rowsAffected: 0보다 크면 해당 건 업데이트 성공, 0은 일치하는 데이터가 없음을 의미합니다. - 보안 주의사항
절대 문자열 연결로 SQL을 만들지 마세요. 외부 입력으로 SQL 인젝션 공격이 발생할 수 있습니다.
일부 필드만 업데이트
이메일만 수정하고 싶다면 모든 컬럼을 적을 필요가 없습니다:
UPDATE student SET Email=@Email WHERE Id=@Id
업데이트 작업
Previous: 삽입
Next: Dapper 삭제 작업