다음을 통해 공유


ODBC에서 트랜잭션 수행

적용 대상: SQL Server Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System(PDW)

Important

SNAC(SQL Server Native Client)는 다음과 함께 제공되지 않습니다.

  • SQL Server 2022(16.x) 이상 버전
  • SQL Server Management Studio 19 이상 버전

SQLNCLI 또는 SQLNCLI11(SQL Server Native Client) 및 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새 애플리케이션 개발에 권장되지 않습니다.

새 프로젝트의 경우 다음 드라이버 중 하나를 사용합니다.

SQL Server 데이터베이스 엔진(버전 2012부터 2019까지)의 구성 요소로 제공되는 SQLNCLI의 경우 이 수명 주기 예외 지원을 참조하세요.

ODBC의 트랜잭션은 연결 수준에서 관리됩니다. 애플리케이션이 트랜잭션을 완료하면 해당 연결의 모든 문 핸들을 통해 완료된 모든 작업을 커밋하거나 롤백합니다. 트랜잭션을 커밋하거나 롤백하려면 애플리케이션은 COMMIT 또는 ROLLBACK 문을 제출하는 대신 SQLEndTran을 호출해야 합니다.

애플리케이션은 SQLSetConnectAttr를 호출하여 트랜잭션 관리의 두 ODBC 모드 간에 전환합니다.

  • 자동 커밋 모드

    각 문은 성공적으로 완료되면 자동으로 커밋됩니다. 응용 프로그램을 자동 커밋 모드에서 실행하면 다른 트랜잭션 관리 기능이 필요하지 않습니다.

  • 수동 커밋 모드

    실행된 모든 문은 SQLEndTran을 호출하여 특별히 중지될 때까지 동일한 트랜잭션에 포함됩니다.

자동 커밋 모드는 ODBC의 기본 트랜잭션 모드입니다. 연결이 이루어지면 자동 커밋 모드를 해제하여 수동 커밋 모드로 전환하기 위해 SQLSetConnectAttr가 호출될 때까지 자동 커밋 모드로 전환됩니다. 애플리케이션에서 자동 커밋을 해제하면 데이터베이스에 보내는 다음 문부터 트랜잭션이 시작되고, 그러면 애플리케이션이 SQL_COMMIT 또는 SQL_ROLLBACK 옵션을 사용하여 SQLEndTran을 호출할 때까지 트랜잭션이 계속 적용됩니다. SQLEndTran이 다음 트랜잭션을 시작한 후 데이터베이스로 전송되는 명령입니다.

애플리케이션이 수동 커밋에서 자동 커밋 모드로 전환하면 드라이버는 연결에서 현재 열려 있는 트랜잭션을 커밋합니다.

BEGIN TRANSACTION, COMMIT TRANSACTION 또는 ROLLBACK TRANSACTION 같은 Transact-SQL 트랜잭션 문을 사용하면 드라이버에서 예기치 않은 동작이 발생할 수 있으므로 ODBC 애플리케이션에서는 이러한 문을 사용하지 않는 것이 좋습니다. ODBC 애플리케이션은 자동 커밋 모드에서 실행되고 트랜잭션 관리 함수 또는 문을 사용하지 않거나 수동 커밋 모드에서 실행되고 ODBC SQLEndTran 함수를 사용하여 트랜잭션을 커밋하거나 롤백해야 합니다.

참고 항목

트랜잭션 수행(ODBC)