트랜잭션 처리

트랜잭션은 연결을 통해 실행되는 일련의 데이터 액세스 작업의 시작과 끝을 구분합니다. 데이터 원본의 트랜잭션 기능에 따라 연결 개체를 사용하여 트랜잭션을 만들고 관리할 수도 있습니다. 예를 들어 Microsoft OLE DB Provider for SQL Server를 사용하여 Microsoft SQL Server의 데이터베이스에 액세스하면 실행하는 명령에 대해 여러 개의 중첩 트랜잭션을 만들 수 있습니다.

ADO는 트랜잭션의 작업으로 인한 데이터 원본 변경 내용이 함께 성공적으로 수행되거나 전혀 발생하지 않도록 합니다.

트랜잭션을 취소하거나 해당 작업 중 하나가 실패하는 경우 결과는 트랜잭션의 작업이 발생하지 않은 것처럼 표시됩니다. 데이터 원본은 트랜잭션이 시작되기 전과 동일하게 유지됩니다.

ADO는 트랜잭션을 제어하기 위한 다음 메서드를 제공합니다. BeginTrans, CommitTrans, RollbackTrans. 원본 데이터에 대한 일련의 변경 내용을 단일 단위로 저장하거나 취소하려는 경우 Connection 개체에서 이러한 메서드를 사용합니다. 예를 들어 계정 간에 송금하려면 한 계정에서 금액을 차감하고 다른 계정에 동일한 금액을 추가합니다. 두 업데이트 중 하나라도 실패하면 더 이상 계정 잔액이 맞지 않게 됩니다. 열려 있는 트랜잭션 내에서 이러한 변경을 수행하면 변경 내용의 전부가 적용되거나 전혀 적용되지 않습니다.

참고 항목

일부 데이터베이스 공급자는 트랜잭션을 지원하지 않습니다. 공급자가 트랜잭션을 지원함을 나타내는 공급자 정의 속성 "Transaction DDL"이 Connection 개체의 Properties 컬렉션에 표시되는지 확인하세요. 공급자가 트랜잭션을 지원하지 않는 경우 이러한 메서드 중 하나를 호출하면 오류가 반환됩니다.

BeginTrans 메서드를 호출한 후에는 CommitTrans 또는 RollbackTrans를 호출하여 트랜잭션을 종료할 때까지 공급자가 변경 내용을 즉시 커밋하지 않습니다.

CommitTrans 메서드를 호출하면 연결의 열려 있는 트랜잭션에서 변경한 내용이 저장되고 트랜잭션이 종료됩니다. RollbackTrans 메서드를 호출하면 열려 있는 트랜잭션 내에서 변경된 내용이 모두 롤백되고 트랜잭션이 종료됩니다. 열려 있는 트랜잭션이 없을 때 이들 메서드를 호출하면 오류가 발생합니다.

Connection 개체의 Attributes 속성에 따라 CommitTrans 또는 RollbackTrans 메서드를 호출하면 새 트랜잭션이 자동으로 시작될 수 있습니다. Attributes 속성이 adXactCommitRetaining으로 설정된 경우 공급자는 CommitTrans 호출 후 자동으로 새 트랜잭션을 시작합니다. Attributes 속성이 adXactAbortRetaining으로 설정된 경우 공급자는 RollbackTrans 호출 후 자동으로 새 트랜잭션을 시작합니다.

트랜잭션 격리 수준

IsolationLevel 속성을 사용하여 Connection 개체에서 트랜잭션의 격리 수준을 설정합니다. 이 설정은 다음에 BeginTrans 메서드를 호출할 때까지 적용되지 않습니다. 사용자가 요청한 격리 수준을 사용할 수 없는 경우 공급자는 다음으로 더 높은 수준의 격리를 반환할 수 있습니다. 유효한 값에 대한 자세한 내용은 ADO 프로그래머 참조의 IsolationLevel 속성을 참조하세요.

중첩 트랜잭션

중첩 트랜잭션을 지원하는 공급자의 경우 열려 있는 트랜잭션 내에서 BeginTrans 메서드를 호출하면 중첩된 새 트랜잭션이 시작됩니다. 반환 값은 중첩 수준을 나타냅니다. 반환 값 "1"은 최상위 트랜잭션(즉, 트랜잭션이 다른 트랜잭션 내에 중첩되지 않음)을 열었음을 나타내고, "2"는 두 번째 수준 트랜잭션(최상위 트랜잭션 내에 중첩된 트랜잭션)을 열었음을 나타냅니다. CommitTrans 또는 RollbackTrans를 호출하면 가장 최근에 열린 트랜잭션에만 영향을 줍니다. 상위 수준의 트랜잭션을 해결하려면 먼저 현재 트랜잭션을 닫거나 롤백해야 합니다.