다음을 통해 공유


상태 전환

ODBC는 각 환경, 각 연결 및 각 문에 대한 불연속 상태를 정의합니다. 예를 들어 환경에는 할당되지 않음(환경이 할당되지 않음), 할당됨(환경이 할당되었지만 연결이 할당되지 않음) 및 커넥트ion(환경 및 하나 이상의 연결이 할당됨)의 세 가지 가능한 상태가 있습니다. 커넥트7개의 가능한 상태가 있습니다. 문에는 13개의 가능한 상태가 있습니다.

해당 핸들로 식별된 특정 항목은 애플리케이션이 특정 함수 또는 함수를 호출하고 핸들을 해당 항목에 전달하는 경우 한 상태에서 다른 상태로 이동합니다. 이러한 움직임을 상태 전환이라고합니다. 예를 들어 SQLAllocHandle을 사용하여 환경 핸들을 할당하면 환경이 할당되지 않음에서 할당됨으로 이동하고 SQLFreeHandle을 사용하여 해당 핸들을 해제하면 할당에서 할당되지 않음으로 반환됩니다. ODBC는 제한된 수의 법적 상태 전환을 정의하며, 이는 함수를 특정 순서로 호출해야 한다고 말하는 또 다른 방법입니다.

SQLGet커넥트Attr과 같은 일부 함수는 상태에 전혀 영향을 미치지 않습니다. 다른 함수는 단일 항목의 상태에 영향을 줍니다. 예를 들어 SQLDisconnect는 커넥트ion 상태에서 할당된 상태로 연결을 이동합니다. 마지막으로, 일부 함수는 둘 이상의 항목의 상태에 영향을 줍니다. 예를 들어 SQLAllocHandle을 사용하여 연결 핸들을 할당하면 할당되지 않은 상태에서 할당된 상태로 연결이 이동하고 환경이 할당됨에서 커넥트ion 상태로 이동합니다.

애플리케이션이 함수를 순서대로 호출하면 이 함수는 상태 전환 오류를 반환합니다. 예를 들어 환경이 커넥트ion 상태이고 애플리케이션이 해당 환경 핸들을 사용하여 SQLFreeHandle을 호출하는 경우 SQLFreeHandle 은 환경이 할당된 상태일 때만 호출할 수 있으므로 SQLSTATE HY010(함수 시퀀스 오류)을 반환합니다. ODBC는 이를 잘못된 상태 전환으로 정의하여 활성 연결이 있는 동안 애플리케이션이 환경을 해제하지 못하도록 합니다.

일부 상태 전환은 ODBC 디자인에 내재되어 있습니다. 예를 들어 먼저 환경 핸들을 할당하지 않고는 연결 핸들을 할당할 수 없습니다. 연결 핸들을 할당하는 함수에는 환경 핸들이 필요하기 때문입니다. 다른 상태 전환은 드라이버 관리자와 드라이버에 의해 적용됩니다. 예를 들어 SQLExecute 는 준비된 문을 실행합니다. 전달된 문 핸들이 준비 상태가 아니면 SQLExecute 는 SQLSTATE HY010(함수 시퀀스 오류)을 반환합니다.

애플리케이션의 관점에서 볼 때 상태 전환은 일반적으로 간단합니다. 법적 상태 전환은 잘 작성된 애플리케이션의 흐름과 함께 이동하는 경향이 있습니다. 상태 전환은 환경의 상태, 각 연결 및 각 문을 추적해야 하기 때문에 드라이버 관리자와 드라이버에 대해 더 복잡합니다. 이 작업의 대부분은 드라이버 관리자에 의해 수행됩니다. 드라이버에서 수행해야 하는 대부분의 작업은 보류 중인 결과가 있는 문과 함께 발생합니다.

이 설명서의 1부와 2부("ODBC 소개" 및 "애플리케이션 및 드라이버 개발")는 상태 전환을 명시적으로 멘션 않는 경향이 있습니다. 대신 함수를 호출해야 하는 순서를 설명합니다. 예를 들어 "Executing Statements"는 SQLExecute를 사용하여 문을 실행하기 전에 SQLPrepare문을 준비해야 한다고 명시합니다. 드라이버 관리자에서 검사 및 드라이버에서 검사 해야 하는 전환을 포함하여 상태 및 상태 전환에 대한 전체 설명은 부록 B: ODBC 상태 전환 테이블을 참조하세요.