본문 바로가기
웹프로그램

BeginTrans, CommitTrans 및 RollbackTrans 메서드 (ADO)

by 세이박스 2009. 6. 9.
반응형
BeginTrans, CommitTrans 및 RollbackTrans 메서드 (ADO)

이들 트랜잭션 메서드는 아래와 같이 Connection 개체 내의 트랜잭션 프로세싱을 관리합니다.
  • BeginTrans는 새 트랜잭션을 시작합니다.

  • CommitTrans는 모든 변경 내용을 저장하고 현재 트랜잭션을 끝냅니다. 이 메서드는 트랜잭션을 시작할 수도 있습니다.

  • RollbackTrans는 현재 트랜잭션 동안 취해진 모든 변경 내용을 취소하고 이 트랜잭션을 끝냅니다. 이 메서드는 트랜잭션을 시작할 수도 있습니다.

구문
level = object.BeginTrans()
object.BeginTrans
object.CommitTrans
object.RollbackTrans

반환값
BeginTrans는 트랜잭션의 중첩 수준을 나타내는 Long 변수를 반환하는 함수로서 호출될 수 있습니다.

매개 변수
object   Connection 개체

Connection
원본 데이터에 한 단위씩 취해진 일련의 변경 내용을 저장하거나 취소하려면 Connection 개체와 함께 이들 메서드를 사용합니다. 예를 들어 두 계좌 사이에 돈을 전송하려는 경우, 한 계좌에서 일정 금액을 인출한 후 다른 계좌에 동일 금액을 추가할 수 있습니다. 이 때 어느 한 쪽이라도 업데이트가 제대로 되지 않으면 계좌 사이의 금액이 균형을 이루지 않습니다. 열린 트랜잭션에서 이러한 변경을 수행하면 이들 변경 내용들이 모두 적용되게 하거나 또는 전혀 적용되지 않게 할 수 있습니다.

메모   모든 제공자가 트랜잭션을 지원하는 것은 아닙니다. Connection 개체의 Properties 컬렉션에 제공자 정의 속성 "Transaction DDL"이 표시되는지 확인하여 해당 제공자에서 트랜잭션이 지원되는지 확인하십시오. 제공자가 트랜잭션을 지원하지 않을 경우에 이들 메서드 중 하나를 호출하면 오류가 발생합니다.
일단 BeginTrans 메서드가 호출되면 제공자는 트랜잭션을 끝내기 위해서 CommitTransRollbackTrans를 호출하기 전에는 어떤 변경도 즉시 수행하지 않습니다.
중첩 트랜잭션을 지원하는 제공자의 경우, 열린 트랜잭션 내에서 BeginTrans 메서드를 호출하면 새로운 중첩 트랜잭션이 시작됩니다. 반환값은 중첩 수준을 표시합니다. 즉, 반환값이 "1"인 경우에는 최상위 트랜잭션(이 트랜잭션은 다른 트랜잭션 내에서 중첩되지 않음)을 열었다는 표시이며, "2"는 둘째 수준의 트랜잭션(최상위 트랜잭션과 중첩된 트랜잭션)을 열었음을 나타냅니다. CommitTrans 또는 RollbackTrans를 호출하면 가장 최근에 열었던 트랜잭션에만 영향을 줍니다. 즉, 다른 상위의 트랜잭션에 영향을 주려면 현재 트랜잭션을 닫거나 롤백해야 합니다.
CommitTrans 메서드를 호출하면 연결 상태의 열린 트랜잭션 내에서 취해진 변경 내용을 저장하고 이 트랜잭션을 닫습니다. RollbackTrans 메서드를 호출하면 열린 트랜잭션 내에서 취해진 모든 변경 내용을 되돌리고 트랜잭션을 닫습니다. 열려 있는 트랜잭션이 없을 때 이들 메서드를 호출하면 오류가 발생합니다.
Connection 개체의 Attributes 속성에 따라 CommitTrans 메서드 또는 RollbackTrans 메서드를 호출하면 자동으로 새 트랜잭션이 시작됩니다. Attributes 속성을 adXactCommitRetaining으로 설정하면 CommitTrans를 호출한 후 제공자가 자동으로 새 트랜잭션을 시작합니다. Attributes 속성을 adXactAbortRetaining으로 설정하면 RollbackTrans를 호출한 후 제공자가 자동으로 새 트랜잭션을 시작합니다.

Remote Data Service
클라이언트 Connection 개체에서는 BeginTrans, CommitTransRollbackTrans 메서드를 사용할 수 없습니다.

반응형