커서 및 준비된 명령문에 트랜잭션이 미치는 영향
트랜잭션 커밋 또는 롤백은 커서 및 액세스 계획에 다음과 같은 영향을 줍니다.
모든 커서가 닫히고 해당 연결에서 준비된 문에 대한 액세스 계획이 삭제되거나
모든 커서가 닫히고 해당 연결의 준비된 문에 대한 액세스 계획이 그대로 기본 또는
모든 커서가 다시 열려 기본 해당 연결에서 준비된 문에 대한 액세스 계획은 그대로 기본.
예를 들어 데이터 원본이 이 목록의 첫 번째 동작을 가장 제한적으로 표시한다고 가정합니다. 이제 애플리케이션이 다음을 수행한다고 가정합니다.
커밋 모드를 수동 커밋으로 설정합니다.
문 1에 판매 주문의 결과 집합을 만듭니다.
사용자가 해당 주문을 강조 표시할 때 문 2의 판매 주문에 선의 결과 집합을 만듭니다.
SQLExecute를 호출하여 사용자가 줄을 업데이트할 때 문 3에서 준비된 위치 지정 업데이트 문을 실행합니다.
SQLEndTran을 호출하여 배치된 업데이트 문을 커밋합니다.
데이터 원본의 동작으로 인해 5단계에서 SQLEndTran을 호출하면 문 1과 2의 커서를 닫고 모든 문에서 액세스 계획을 삭제합니다. 애플리케이션은 문 1과 2를 다시 테스트하여 결과 집합을 다시 만들고 문 3에서 문을 다시 준비해야 합니다.
자동 커밋 모드에서 SQLEndTran 커밋 트랜잭션 이외의 함수:
SQLExecute 또는 SQLExecDirect 이전 예제에서 4단계에서 SQLExecute에 대한 호출은 트랜잭션을 커밋합니다. 이렇게 하면 데이터 원본이 문 1과 2의 커서를 닫고 해당 연결의 모든 문에서 액세스 계획을 삭제합니다.
SQLBulkOperations 또는 SQLSetPos 앞의 예제에서 4단계에서 애플리케이션이 문 3에 배치된 업데이트 문을 실행하는 대신 문 2의 SQL_UPDATE 옵션을 사용하여 SQLSetPos를 호출한다고 가정합니다. 이렇게 하면 트랜잭션이 커밋되고 데이터 원본이 문 1과 2의 커서를 닫고 해당 연결에 대한 모든 액세스 계획을 카드 않습니다.
앞의 예제에서 사용자가 다른 판매 주문을 강조 표시할 때 애플리케이션은 새 판매 주문에 대한 줄의 결과를 만들기 전에 문 2에서 SQLCloseCursor를 호출한다고 가정합니다. SQLCloseCursor에 대한 호출은 결과 줄 집합을 만든 SELECT 문을 커밋하고 데이터 원본이 문 1에서 커서를 닫은 다음 해당 연결에 대한 모든 액세스 계획을 카드 않습니다.
애플리케이션, 특히 사용자가 결과 집합을 스크롤하여 행을 업데이트하거나 삭제하는 화면 기반 애플리케이션은 이 동작을 중심으로 코딩하는 데 주의해야 합니다.
트랜잭션이 커밋되거나 롤백될 때 데이터 원본이 동작하는 방식을 결정하기 위해 애플리케이션은 SQL_CURSOR_COMMIT_BEHAVIOR 및 SQL_CURSOR_ROLLBACK_BEHAVIOR 옵션을 사용하여 SQLGetInfo를 호출합니다.