SQLDisconnect 함수
규칙
버전 소개: ODBC 1.0 표준 준수: ISO 92
요약
SQLDisconnect 는 특정 연결 핸들과 연결된 연결을 닫습니다.
구문
SQLRETURN SQLDisconnect(
SQLHDBC ConnectionHandle);
인수
ConnectionHandle
[Input] 연결 핸들입니다.
반품
SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE 또는 SQL_STILL_EXECUTING.
진단
SQLDisconnect가 SQL_ERROR 또는 SQL_SUCCESS_WITH_INFO 반환하는 경우 SQL_HANDLE_DBC HandleType 및 ConnectionHandle 핸들을 사용하여 SQLGetDiagRec 를 호출하여 관련 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 SQLDisconnect에서 일반적으로 반환되는 SQLSTATE 값을 나열하고 이 함수의 컨텍스트에서 각 값을 설명합니다. 표기법 "(DM)"은 드라이버 관리자가 반환한 SQLSTATE에 대한 설명 앞에 나와 있습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.
SQLSTATE | Error | 설명 |
---|---|---|
01000 | 일반 경고 | 드라이버 관련 정보 메시지입니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다. |
01002 | 연결 끊기 오류 | 연결 끊기 중에 오류가 발생했습니다. 그러나 연결 끊김이 성공했습니다. 함수는 SQL_SUCCESS_WITH_INFO 반환합니다. |
08003 | 연결이 열리지 않음 | (DM) ConnectionHandle 인수에 지정된 연결이 열려 있지 않습니다. |
25000 | 잘못된 트랜잭션 상태 | ConnectionHandle 인수로 지정된 연결에 대한 트랜잭션이 처리 중입니다. 트랜잭션이 활성 상태로 유지되었습니다. |
HY000 | 일반 오류 | 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼의 SQLGetDiagRec에서 반환된 오류 메시지는 오류와 그 원인을 설명합니다. |
HY001 | 메모리 할당 오류 | 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다. |
HY008 | 작업이 취소됨 | ConnectionHandle에 대해 비동기 처리를 사용하도록 설정했습니다. 함수가 호출되었고 실행 중인 SQLCancelHandle 함수가 ConnectionHandle에서 호출되기 전에 호출되었습니다. 그런 다음 ConnectionHandle에서 함수가 다시 호출되었습니다. 함수가 호출되었고 SQLCancelHandle 실행을 완료하기 전에 다중 스레드 애플리케이션의 다른 스레드에서 ConnectionHandle에서 호출되었습니다. |
HY010 | 함수 시퀀스 오류 | (DM) ConnectionHandle과 연결된 StatementHandle에 대해 비동기 실행 함수가 호출되었고 SQLDisconnect가 호출될 때 계속 실행되고 있었습니다. (DM) ConnectionHandle에 대해 비동기 실행 함수(이 함수가 아님)가 호출되었고 이 함수가 호출되었을 때 계속 실행되고 있었습니다. (DM) SQLExecute, SQLExecDirect, SQLBulkOperations 또는 SQLSetPos는 ConnectionHandle과 연결된 StatementHandle에 대해 호출되고 SQL_NEED_DATA 반환되었습니다. 이 함수는 모든 실행 시 데이터 매개 변수 또는 열에 대한 데이터를 보내기 전에 호출되었습니다. |
HY013 | 메모리 관리 오류 | 메모리 조건이 낮기 때문에 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다. |
HY117 | 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. | (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수를 참조 하세요. |
HYT01 | 연결 제한 시간이 만료됨 | 데이터 원본이 요청에 응답하기 전에 연결 제한 기간이 만료되었으며 연결은 여전히 활성 상태입니다. 연결 제한 시간은 SQL_ATTR_CONNECTION_TIMEOUT SQLSetConnectAttr를 통해 설정됩니다. |
IM001 | 드라이버는 이 함수를 지원하지 않습니다. | (DM) ConnectionHandle과 연결된 드라이버는 함수를 지원하지 않습니다. |
IM017 | 비동기 알림 모드에서 폴링을 사용할 수 없습니다. | 알림 모델을 사용할 때마다 폴링이 비활성화됩니다. |
IM018 | 이 핸들에서 이전 비동기 작업을 완료하기 위해 SQLCompleteAsync 가 호출되지 않았습니다. | 핸들의 이전 함수 호출이 SQL_STILL_EXECUTING 반환하고 알림 모드가 활성화된 경우 사후 처리를 수행하고 작업을 완료하려면 핸들에서 SQLCompleteAsync 를 호출해야 합니다. |
주석
SQLBrowseConnect가 SQL_NEED_DATA 반환하고 다른 반환 코드를 반환하기 전에 애플리케이션이 SQLDisconnect 를 호출하는 경우 드라이버는 연결 검색 프로세스를 취소하고 연결되지 않은 상태로 연결을 반환합니다.
연결 핸들과 연결된 불완전한 트랜잭션이 있는 동안 애플리케이션이 SQLDisconnect를 호출하는 경우 드라이버는 트랜잭션이 변경되지 않고 연결이 열려 있음을 나타내는 SQLSTATE 25000(잘못된 트랜잭션 상태)을 반환합니다. 불완전한 트랜잭션은 SQLEndTran을 사용하여 커밋되거나 롤백되지 않은 트랜잭션입니다.
애플리케이션이 연결과 연결된 모든 문을 해제하기 전에 SQLDisconnect를 호출하는 경우 드라이버는 데이터 원본에서 성공적으로 연결을 끊은 후 해당 문과 연결에 명시적으로 할당된 모든 설명자를 해제합니다. 그러나 연결과 연결된 하나 이상의 문이 여전히 비동기적으로 실행되는 경우 SQLDisconnect 는 SQLSTATE 값이 HY010인 SQL_ERROR 반환합니다(함수 시퀀스 오류). 또한 SQLDisconnect는 연결이 일시 중단된 상태이거나 SQLCancelHandle에서 SQLDisconnect가 성공적으로 취소된 경우 연결에 명시적으로 할당된 모든 관련 문과 설명자를 해제합니다.
애플리케이션에서 SQLDisconnect를 사용하는 방법에 대한 자세한 내용은 데이터 원본 또는 드라이버에서 연결 끊기를 참조하세요.
풀링된 연결에서 연결 끊기
공유 환경에 대해 연결 풀링을 사용하도록 설정하고 애플리케이션이 해당 환경의 연결에서 SQLDisconnect를 호출하는 경우 연결은 연결 풀로 반환되며 동일한 공유 환경을 사용하는 다른 구성 요소에서 계속 사용할 수 있습니다.
코드 예
샘플 ODBC 프로그램, SQLBrowseConnect 함수 및 SQLConnect 함수를 참조하세요.
관련 함수
추가 정보 | 참조 |
---|---|
핸들 할당 | SQLAllocHandle 함수 |
데이터 소스에 연결 | SQLConnect 함수 |
연결 문자열 또는 대화 상자를 사용하여 데이터 원본에 연결 | SQLDriverConnect 함수 |
커밋 또는 롤백 작업 실행 | SQLEndTran 함수 |
연결 핸들 해제 | SQLFreeConnect 함수 |