2012-12-13 5 views
4

두 개의 데이터베이스 함수 중 하나를 사용해야합니다.이 함수는 주석을 삭제해야하며 두 번째 함수는 사용자 점수를 줄입니다.두 함수 호출간에 데이터를 처리하는 방법

문제점 : 두 번째 기능에서 예외가 발생하면 점수는 차감되지 않지만 주석은 삭제됩니다.

클래스 개체에 첫 번째 함수의 저장 작업을 시도하고 두 번째 예외가 발생하면 데이터베이스에서 다시 작업 할 역 동작이 수행됩니다. 이 일을 할 수있는 다른 방법이 있습니까? 미리 감사드립니다.

+0

여분의 처리를 피하기 위해 하나의 기능을 결합합니까? – Raptor

+0

첫 번째 쿼리를 실행 한 후에 예외가 발생하는 경우 ... –

답변

2

동일한 트랜잭션의 범위 내에서 두 데이터베이스 호출이 모두 필요합니다. 따라서 예외가 발생하면 모두 롤백됩니다.

그것은 당신이 데이터베이스에 액세스하는 방법에 따라 달라집니다하지만이 같은 수 : 두 함수 모두 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; 
    } 

} 
+0

좀 더 자세하게 설명해주십시오. –

+1

업데이트 된 답변, 더 명확한 예제를 유지했지만 몇 가지가 있습니다. 이것에 대한 좋은 접근 방식은 상세한 설명을 따르기는 쉽지만 개선의 여지가 있습니다. 요구 사항에 따라 다르지만 올바른 방향으로 당신을 가리켜 야합니다. – dove

+0

위의 코드 덕분에 도움이되었습니다. –

1

또는 그 중 하나 neighter 당신이 두 기능의 주위에 트랜잭션을 넣어해야합니다.

트랜잭션을 커밋하면 주석과 감소 점수가 데이터베이스에 저장됩니다. 예외가있는 경우 롤백을 수행 할 수 있고 데이터베이스에서 아무 것도 발생하지 않습니다.

관련 문제