드라이버 애플리케이션 만들기 - 비동기 모드 및 SQLCancel

적용 대상:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics AnalyticsPlatform System(PDW)

Important

SQL Server Native Client(약칭 SNAC)는 SQL Server 2022(16.x) 및 SSMS(SQL Server Management Studio) 19에서 제거되었습니다. SQL Server Native Client(SQLNCLI 또는 SQLNCLI11) 및 레거시 Microsoft OLE DB Provider for SQL Server(SQLOLEDB)는 새 애플리케이션 개발에 권장되지 않습니다. 앞으로 새 SQL Server용 Microsoft OLE DB 드라이버(MSOLEDBSQL) 또는 최신 Microsoft ODBC Driver for SQL Server로 전환합니다. SQL Server 데이터베이스 엔진(버전 2012~2019)의 구성 요소로 제공되는 SQLNCLI의 경우 이 지원 수명 주기 예외를 참조하세요.

일부 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을 사용합니다. SQLMoreResults 또는 SQLCloseCursor를 사용하여 SQLCancel이 아닌 나머지 미해결 결과 집합을 취소해야 합니다.

참고 항목

SQL Server Native Client ODBC 드라이버 애플리케이션 만들기