트랜잭션(ODBC)
이 항목은 MFC ODBC 클래스에 적용됩니다.
트랜잭션은 한 번에 커밋되거나 트랜잭션을 롤백하는 경우 커밋되지 않도록 데이터 원본에 대한 일련의 업데이트를 그룹화하거나 일괄 처리하는 방법입니다. 트랜잭션을 사용하지 않는 경우 요청 시 커밋되지 않고 데이터 원본에 대한 변경 내용이 자동으로 커밋됩니다.
참고 항목
모든 ODBC 데이터베이스 드라이버가 트랜잭션을 지원하는 것은 아닙니다. CanTransact
CDatabase 또는 CRecordset 개체의 멤버 함수를 호출하여 드라이버가 지정된 데이터베이스에 대한 트랜잭션을 지원하는지 여부를 확인합니다. 데이터 원본이 CanTransact
전체 트랜잭션 지원을 제공하는지 여부는 알려주지 않습니다. 또한 열려 CRecordset
있는 개체에 대한 트랜잭션의 영향을 호출 CDatabase::GetCursorCommitBehavior
한 CDatabase::GetCursorRollbackBehavior
Rollback
후 CommitTrans
확인해야 합니다.
개체의 AddNew
멤버 함수 및 Edit
멤버 함수에 대한 CRecordset
호출은 호출 Update
할 때 데이터 원본에 즉시 영향을 줍니다. Delete
호출도 즉시 적용됩니다. 반대로, 명시적으로 호출할 AddNew
때까지 수행되지만 커밋되지 않는 , Edit
Update
및 Delete
에 대한 여러 호출 CommitTrans
로 구성된 트랜잭션을 사용할 수 있습니다. 트랜잭션을 설정하면 이러한 호출을 롤백하는 기능을 유지하면서 일련의 호출을 실행할 수 있습니다. 중요한 리소스를 사용할 수 없거나 다른 조건으로 인해 전체 트랜잭션이 완료되지 않는 경우 트랜잭션을 커밋하는 대신 롤백할 수 있습니다. 이 경우 트랜잭션에 속하는 변경 내용이 데이터 원본에 영향을 미치지 않습니다.
참고 항목
현재 대량 행 페치를 구현한 경우 클래스 CRecordset
는 데이터 원본에 대한 업데이트를 지원하지 않습니다. 즉, , Edit
또는 Delete
Update
.를 호출할 AddNew
수 없습니다. 그러나 고유한 함수를 작성하여 업데이트를 수행한 다음 지정된 트랜잭션 내에서 해당 함수를 호출할 수 있습니다. 대량 행 페치 에 대한 자세한 내용은 레코드 집합: 대량 레코드 가져오기(ODBC)를 참조하세요.
참고 항목
트랜잭션은 레코드 집합에 영향을 주는 것 외에도 개체와 연결된 CDatabase
ODBC HDBC 또는 해당 HDBC를 기반으로 하는 ODBC HSTMT를 사용하는 한 직접 실행하는 SQL 문에 영향을 줍니다.
트랜잭션은 동시에 업데이트해야 하는 여러 레코드가 있는 경우에 특히 유용합니다. 이 경우 마지막 업데이트가 수행되기 전에 예외가 throw된 경우와 같이 반쯤 완료된 트랜잭션을 방지하려고 합니다. 이러한 업데이트를 트랜잭션으로 그룹화하면 변경 내용에서 복구(롤백)하고 레코드를 사전 실행 상태로 반환할 수 있습니다. 예를 들어 은행에서 계좌 A에서 계좌 B로 송금하는 경우 A에서 인출하고 B로의 예금은 모두 자금을 올바르게 처리하는 데 성공해야 하며 전체 트랜잭션은 실패해야 합니다.
데이터베이스 클래스에서는 개체를 통해 CDatabase
트랜잭션을 수행합니다. 개체는 CDatabase
데이터 원본에 대한 연결을 나타내며, 해당 개체와 연결된 하나 이상의 레코드 집합은 CDatabase
레코드 집합 멤버 함수를 통해 데이터베이스 테이블에서 작동합니다.
참고 항목
한 수준의 트랜잭션만 지원됩니다. 트랜잭션을 중첩할 수도 없고 트랜잭션이 여러 데이터베이스 개체에 걸쳐 있는 것도 불가능합니다.
다음 항목에서는 트랜잭션이 수행되는 방법에 대한 자세한 정보를 제공합니다.