두 개의 데이터베이스 함수 중 하나를 사용해야합니다.이 함수는 주석을 삭제해야하며 두 번째 함수는 사용자 점수를 줄입니다.두 함수 호출간에 데이터를 처리하는 방법
문제점 : 두 번째 기능에서 예외가 발생하면 점수는 차감되지 않지만 주석은 삭제됩니다.
클래스 개체에 첫 번째 함수의 저장 작업을 시도하고 두 번째 예외가 발생하면 데이터베이스에서 다시 작업 할 역 동작이 수행됩니다. 이 일을 할 수있는 다른 방법이 있습니까? 미리 감사드립니다.
두 개의 데이터베이스 함수 중 하나를 사용해야합니다.이 함수는 주석을 삭제해야하며 두 번째 함수는 사용자 점수를 줄입니다.두 함수 호출간에 데이터를 처리하는 방법
문제점 : 두 번째 기능에서 예외가 발생하면 점수는 차감되지 않지만 주석은 삭제됩니다.
클래스 개체에 첫 번째 함수의 저장 작업을 시도하고 두 번째 예외가 발생하면 데이터베이스에서 다시 작업 할 역 동작이 수행됩니다. 이 일을 할 수있는 다른 방법이 있습니까? 미리 감사드립니다.
동일한 트랜잭션의 범위 내에서 두 데이터베이스 호출이 모두 필요합니다. 따라서 예외가 발생하면 모두 롤백됩니다.
그것은 당신이 데이터베이스에 액세스하는 방법에 따라 달라집니다하지만이 같은 수 : 두 함수 모두 writen해야하는 경우
using (var Conn = new SqlConnection(_ConnectionString))
{
SqlTransaction trans = null;
try
{
Conn.Open();
trans = Conn.BeginTransaction();
using (SqlCommand Com = new SqlCommand(ComText, Conn, trans))
{
// delete comment
// update score
}
trans.Commit();
}
catch (Exception Ex)
{
if (trans != null) trans.Rollback();
return -1;
}
}
좀 더 자세하게 설명해주십시오. –
업데이트 된 답변, 더 명확한 예제를 유지했지만 몇 가지가 있습니다. 이것에 대한 좋은 접근 방식은 상세한 설명을 따르기는 쉽지만 개선의 여지가 있습니다. 요구 사항에 따라 다르지만 올바른 방향으로 당신을 가리켜 야합니다. – dove
위의 코드 덕분에 도움이되었습니다. –
또는 그 중 하나 neighter 당신이 두 기능의 주위에 트랜잭션을 넣어해야합니다.
트랜잭션을 커밋하면 주석과 감소 점수가 데이터베이스에 저장됩니다. 예외가있는 경우 롤백을 수행 할 수 있고 데이터베이스에서 아무 것도 발생하지 않습니다.
여분의 처리를 피하기 위해 하나의 기능을 결합합니까? – Raptor
첫 번째 쿼리를 실행 한 후에 예외가 발생하는 경우 ... –