스칼라 변수 및 간단한 삭제 명령문

.net c# dapper

문제

정수형의 ID를받는 DeleteAuthors 메소드가 있습니다. 나는 dapper를 사용하여 BookId가 parametar로받은 ID와 동일한 테이블에서 모든 데이터를 삭제하고 싶습니다.

private void DeleteAuthors(int id)
{
    this.db.Query("DELETE FROM Author WHERE BookId = @id");
}

스칼라 변수 "@id"를 선언해야합니다.

그래서 나는 이것을 시도했다.

private void DeleteAuthors(int id)
{
   this.db.Query("DELETE FROM Author WHERE BookId = @Id", new { Id = id});
}

오류는

Dapper.dll에서 'System.ArgumentException'유형의 처리되지 않은 예외가 발생했습니다.

추가 정보 : 다중 매핑 API를 사용할 때 ID가 아닌 키가있는 경우 splitOn 매개 변수를 설정하십시오.

id 매개 변수가 int 값으로 올바르게 채워집니다. 나는 이것이 간단하다는 것을 압니다. 그러나 저는 여기서 투쟁하고 있습니다.

수락 된 답변

사용 db.Execute 대신 db.Query 당신이 기록을 삭제하려면 :

int numDel = db.Execute("DELETE FROM Author WHERE BookId = @BookId;", new { BookId = Id }, null, null, null);

하지만 using 문을 using 가능한 빨리 오류가 발생하더라도 연결이 폐기 / 종료되도록해야합니다.

int numDel = 0;
using (SqlConnection db = new SqlConnection("ConnectionString"))
{
    db.Open();
    numDel = db.Execute("DELETE FROM Author WHERE BookId = @BookId;", new { BookId = Id }, null, null, null);
}

인기 답변

@를 쿼리에서 바꾸는 것에 대해 확실하지 않음

그러나 다음과 같이 작동합니다 :

private void DeleteAuthors(int id)
{
    this.db.Query(string.Format("DELETE FROM Author WHERE BookId = {0}",id));
}


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow