2011-08-25 3 views
1

메소드가 실패 할 경우 MySQL 트랜잭션을 사용하여 변경 사항을 롤백하고 싶습니다. StackOverflow : MySql and inserting last ID problem remains에서이 예제를 언급했지만 내 문제는 조금 다릅니다.두 가지 방법으로 MySQL 변환 처리하기

나는 아래와 같은 코드가 있습니다

private void btnSave_Click(object sender, EventArgs e) 
{ 
    btnSave.Enabled = false; 
    int result1 = SaveBillDetails(); 
    int result2 = SaveBillItems(); 

    if ((result1 == 1) && (result2 == 1)) 
    { 
     //Update old stock 
     UpdateStock.ReduceStock(Convert.ToInt32(txtBillNo.Text), Convert.ToDateTime(dtpBillDate.Text)); 
     MessageBox.Show("Saved", "StockApp", MessageBoxButtons.OK, MessageBoxIcon.Information); 

    } 
    btnSave.Enabled = true; 
} 

내가 들어 BeginTransaction 같은 것을 호출 할 단지 SaveBillItems SaveBillDetails 가 호출됩니다. 이 두 가지 방법 모두 트랜잭션을 사용하지 않습니다. 위 코드에 트랜잭션을 추가하기 만하면됩니다.

+0

무엇이 문제입니까? 와나 코드 스타일 질문? – Reniuz

+0

두 가지 방법 모두 독립적 인 데이터 액세스 클래스를 사용한다는 점에서 문제가 있습니다. 세 가지 방법 모두를 병합합니다. SaveBillDetails, SaveBillItems 및 ReduceStock는 시간이 많이 소요되는 작업입니다. 위 코드에 BeginTransaction을 추가하면 내 질문에 게시 한 링크에 표시된 코드를 사용하지 않으면 트랜잭션을 시작하지 않는다고 가정합니다. – RKh

답변

1

MySQL이 닷넷의 어느적인 버전에 당신이 목표로하고있는 당신이 사용하고있는 MySQL의 커넥터의 버전있다 따라와 System.TransactionScope를 사용하는 것이 가능할 수있다 -이 post

는이 question에 대한 설명을 참조 참조

+0

.NET 3.5 SP1 및 MySQL ConnectorNet 6.4.3을 사용하고 있습니다. – RKh

1

이것은 데이터 액세스 레이어 디자인 및 구현을 완전히 제어한다고 가정 할 때 일반적인 문제입니다. 연결 또는 트랜잭션을 생성하고이를 반환하는 방법이 있어야하며 두 가지 저장 방법을 수락하도록 수정해야합니다 트랜잭션을 매개 변수로 사용하여 명령 실행에 사용하십시오.

이렇게 개체를 사용하여 연결 및 트랜잭션 사용을 감싸는 것이 매우 중요합니다.

관련 문제