트랜잭션 유형

Microsoft SQL Server Compact에서는 두 가지 유형의 트랜잭션인 명시적 트랜잭션과 자동 커밋 트랜잭션을 지원합니다.

명시적 트랜잭션은 트랜잭션의 시작과 끝을 모두 명시적으로 정의하는 트랜잭션입니다. 이 트랜잭션은 SQL 문이나 데이터베이스 API 함수를 사용하여 지정할 수 있습니다.

SQL 문

Visual Studio에서 다음 SQL 문을 사용하여 명시적 트랜잭션을 정의할 수 있습니다.

  • BEGIN TRANSACTION

    연결에 대한 명시적 트랜잭션의 시작 지점을 표시합니다.

  • COMMIT TRANSACTION

    오류가 발생하지 않으면 트랜잭션을 종료합니다. 트랜잭션에서 수정한 모든 데이터는 데이터베이스에 영구적으로 적용됩니다. 트랜잭션에서 잠긴 리소스도 해제됩니다.

  • ROLLBACK TRANSACTION

    오류가 발생한 트랜잭션을 지웁니다. 트랜잭션에서 수정한 모든 데이터는 트랜잭션 시작 시의 상태로 돌아갑니다. 트랜잭션에서 잠긴 리소스도 해제됩니다.

ADO.NET 및 OLE DB

ADO.NET 및 OLE DB에서 명시적 트랜잭션을 사용할 수도 있습니다.

ADO.NET에서는 SqlCeConnection 개체의 BeginTransaction 메서드를 사용하여 명시적 트랜잭션을 시작합니다. 트랜잭션을 종료하려면 SqlCeTransaction 개체의 Commit 또는 Rollback 메서드를 호출하십시오.

OLE DB에서는 ITransactionLocal::StartTransaction 메서드를 호출하여 트랜잭션을 시작합니다. 자동으로 다른 트랜잭션을 시작하지 않고 트랜잭션을 종료하려면 fRetainingFALSE로 설정한 상태에서 ITransaction::Commit 또는 ITransaction::Abort, 메서드를 호출하십시오. 단일 ADO.NET 연결에 여러 트랜잭션을 만들어 개별 명령에 할당할 수 있습니다.

중요 정보 중요

ADO.NET API를 사용하여 트랜잭션을 커밋하면 해당 트랜잭션 내에 열려 있는 모든 데이터 판독기와 결과 집합이 닫힙니다.

자동 커밋 모드는 SQL Server Compact의 기본 트랜잭션 관리 모드입니다. 모든 SQL 문은 완료될 때 커밋되거나 롤백됩니다. 명시적 트랜잭션에 의해 이 기본 모드가 무시되지 않는 한 SQL Server Compact 연결은 자동 커밋 모드로 작동합니다. 자동 커밋 모드는 ADO.NET 및 OLE DB의 기본 모드이기도 합니다.

SQL Server Compact 연결은 BEGIN TRANSACTION 문이 명시적 트랜잭션을 시작할 때까지 자동 커밋 모드로 작동합니다. 명시적 트랜잭션이 커밋되거나 롤백되면 SQL Server Compact는 자동 커밋 모드로 돌아갑니다.

SQL Server와 달리 SQL Server Compact는 문을 일괄 작업으로 처리하지 않습니다. SQL Server Compact는 한 번에 하나의 문을 처리하고 각 문을 개별적으로 실행합니다. 특정 문에서 오류를 반환하는 경우에도 해당 일괄 작업에 포함된 다른 문에는 영향을 주지 않습니다. 예를 들어 Visual Studio를 사용하여 SQL Server Compact에서 다음 쿼리 집합을 실행하면 구문 오류로 인해 처음 두 쿼리는 성공하지만 세 번째 쿼리는 실패합니다.

CREATE TABLE TestData (col int);

INSERT INTO TestData VALUES (1);

INSERTT INTO TestData VALUES (1);

참고 참고

이러한 쿼리를 일괄 작업으로 SQL Server에 보내면 쿼리가 함께 구문 분석되기 때문에 모든 쿼리가 실패합니다. 구문 오류가 있으면 SQL Server에서 일괄 작업의 실행 계획을 구성하지 못합니다.

상위 수준의 트랜잭션에서 작업이 발생하고 있으면 해당 트랜잭션은 롤백되거나 커밋되지 않습니다.

표시: