다음을 통해 공유


비동기 모드와 SQLCancel

일부 ODBC 함수는 동기적 또는 비동기적으로 작동할 수 있습니다. 응용 프로그램에서는 문 핸들이나 연결 핸들에 대해 비동기 작업을 설정할 수 있습니다. 연결 핸들에 대해 비동기 작업 옵션을 설정하면 연결 핸들의 모든 문 핸들에도 적용됩니다. 응용 프로그램에서는 다음 문을 사용하여 비동기 작업을 설정하거나 해제합니다.

SQLSetConnectAttr(hdbc, SQL_ATTR_ASYNC_ENABLE,
                        SQL_ASYNC_ENABLE_ON, SQL_IS_INTEGER);
SQLSetConnectAttr(hdbc, SQL_ATTR_ASYNC_ENABLE,
                        SQL_ASYNC_ENABLE_OFF, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ASYNC_ENABLE,
                        SQL_ASYNC_ENABLE_ON, SQL_IS_INTEGER);
SQLSetStmtAttr(hstmt, SQL_ATTR_ASYNC_ENABLE,
                        SQL_ASYNC_ENABLE_OFF, SQL_IS_INTEGER);

응용 프로그램에서 ODBC 함수를 동기 모드로 호출하면 서버가 명령을 완료했다는 알림을 받을 때까지 드라이버가 응용 프로그램에 제어를 반환하지 않습니다.

반면 비동기로 작업을 수행하는 경우 드라이버는 서버에 명령을 보내기 전이라도 즉시 응용 프로그램에 제어를 반환합니다. 드라이버가 반환 코드를 SQL_STILL_EXECUTING으로 설정하여 응용 프로그램이 다른 작업을 수행할 수 있게 됩니다.

명령 실행이 완료되었는지 테스트할 때 응용 프로그램은 드라이버에 대해 동일한 매개 변수를 사용하여 동일한 함수를 호출합니다. 드라이버는 서버로부터 아직 응답을 받지 않은 경우 다시 SQL_STILL_EXECUTING을 반환합니다. 응용 프로그램은 SQL_STILL_EXECUTING 이외의 코드가 반환될 때까지 명령을 주기적으로 테스트해야 합니다. 응용 프로그램은 다른 반환 코드(SQL_ERROR 포함)가 수신되면 명령이 완료된 것으로 판단할 수 있습니다.

명령이 오랫동안 보류되는 경우도 있습니다. 이러한 경우 응용 프로그램에서 보류 명령과 동일한 문 핸들을 사용하여 SQLCancel을 호출하면 응답을 기다리지 않고 명령을 취소할 수 있습니다. SQLCancel은 이 경우에만 사용해야 합니다. 결과 집합 중 일부를 처리한 후 나머지 결과 집합을 취소할 때 SQLCancel을 사용하는 프로그래머도 있는데, 이렇게 보류 중인 결과 집합의 나머지 부분을 취소할 때는 SQLCancel이 아니라 SQLMoreResults 또는 SQLCloseCursor를 사용해야 합니다.