SQLFreeHandle 함수
규칙
도입된 버전: ODBC 3.0 표준 준수: ISO 92
요약
SQLFreeHandle 특정 환경, 연결, 문 또는 설명자 핸들과 관련된 리소스를 해제합니다.
메모
이 함수는 핸들을 해제하기 위한 제네릭 함수입니다. ODBC 2.0 함수
통사론
SQLRETURN SQLFreeHandle(
SQLSMALLINT HandleType,
SQLHANDLE Handle);
인수
HandleType
[입력] sqlFreeHandle
SQL_HANDLE_DBC
SQL_HANDLE_DBC_INFO_TOKEN
SQL_HANDLE_DESC
SQL_HANDLE_ENV
SQL_HANDLE_STMT
SQL_HANDLE_DBC_INFO_TOKEN 핸들은 드라이버 관리자 및 드라이버에서만 사용됩니다. 애플리케이션은 이 핸들 형식을 사용하면 안 됩니다. SQL_HANDLE_DBC_INFO_TOKEN 대한 자세한 내용은 ODBC 드라이버
HandleType 이러한 값 중 하나가 아닌 경우 SQLFreeHandle SQL_INVALID_HANDLE 반환합니다.
핸들
[입력] 해제할 핸들입니다.
반환
SQL_SUCCESS, SQL_ERROR 또는 SQL_INVALID_HANDLE.
SQLFreeHandle SQL_ERROR 반환하는 경우 핸들은 여전히 유효합니다.
진단
SQLFreeHandle SQL_ERROR 반환하는 경우 SQLFreeHandle을 핸들에 대한 진단 데이터 구조에서 연결된 SQLSTATE 값을 가져올 수 있습니다. 다음 표에서는 SQLFreeHandle 일반적으로 반환되는 SQLSTATE 값을 나열하고 이 함수의 컨텍스트에서 각각에 대해 설명합니다. "(DM)" 표기법은 드라이버 관리자가 반환한 SQLSTATE에 대한 설명 앞에 섰습니다. 달리 명시되지 않는 한 각 SQLSTATE 값과 연결된 반환 코드는 SQL_ERROR.
SQLSTATE | 오류 | 묘사 |
---|---|---|
HY000 | 일반 오류 | 특정 SQLSTATE가 없고 구현별 SQLSTATE가 정의되지 않은 오류가 발생했습니다. *MessageText 버퍼의 SQLGetDiagRec 반환된 오류 메시지는 오류와 그 원인을 설명합니다. |
HY001 | 메모리 할당 오류 | 드라이버가 함수 실행 또는 완료를 지원하는 데 필요한 메모리를 할당할 수 없습니다. |
HY010 | 함수 시퀀스 오류 | (DM) HandleType 인수가 SQL_HANDLE_ENV 하나 이상의 연결이 할당되었거나 연결된 상태였습니다. SQL_HANDLE_ENV (DM) HandleType 인수가 SQL_HANDLE_DBC 연결에 SQLDisconnect 호출하기 전에 함수가 호출되었습니다. (DM) HandleType 인수가 SQL_HANDLE_DBC. Handle 사용하여 비동기 실행 함수가 호출되었고 이 함수가 호출되었을 때 함수가 계속 실행되고 있었습니다. (DM) HandleType 인수가 SQL_HANDLE_STMT. SQLExecute, SQLExecDirect, SQLBulkOperations또는 SQLSetPos 문 핸들을 사용하여 호출되고 SQL_NEED_DATA 반환되었습니다. 이 함수는 모든 실행 시 데이터 매개 변수 또는 열에 대한 데이터를 보내기 전에 호출되었습니다. (DM) HandleType 인수가 SQL_HANDLE_STMT. 문 핸들 또는 연결된 연결 핸들에서 비동기적으로 실행되는 함수가 호출되었고 이 함수가 호출될 때 함수가 계속 실행되고 있었습니다. (DM) HandleType 인수가 SQL_HANDLE_DESC. 연결된 연결 핸들에서 비동기적으로 실행되는 함수가 호출되었습니다. 이 함수가 호출되었을 때 함수가 계속 실행되고 있습니다. (DM) SQLFreeHandle (DM) SQLExecute, SQLExecDirect또는 SQLMoreResults핸들 연결된 문 핸들 중 하나에 대해 호출되었으며 HandleType SQL_HANDLE_STMT 또는 반환된 SQL_HANDLE_DESC SQL_PARAM_DATA_AVAILABLE. 이 함수는 모든 스트리밍된 매개 변수에 대해 데이터를 검색하기 전에 호출되었습니다. |
HY013 | 메모리 관리 오류 | HandleType 인수가 SQL_HANDLE_STMT 또는 SQL_HANDLE_DESC 메모리가 부족하여 기본 메모리 개체에 액세스할 수 없기 때문에 함수 호출을 처리할 수 없습니다. |
HY017 | 자동으로 할당된 설명자 핸들을 잘못 사용했습니다. | (DM) Handle 인수가 자동으로 할당된 설명자에 대한 핸들로 설정되었습니다. |
HY117 | 알 수 없는 트랜잭션 상태로 인해 연결이 일시 중단됩니다. 연결 끊기 및 읽기 전용 함수만 허용됩니다. | (DM) 일시 중단 상태에 대한 자세한 내용은 SQLEndTran 함수참조하세요. |
HYT01 | 연결 제한 시간이 만료되었습니다. | 데이터 원본이 요청에 응답하기 전에 연결 제한 시간이 만료되었습니다. 연결 제한 시간은 SQLSetConnectAttr, SQL_ATTR_CONNECTION_TIMEOUT 통해 설정됩니다. |
IM001 | 드라이버는 이 함수를 지원하지 않습니다. | (DM) HandleType 인수가 SQL_HANDLE_DESC 드라이버가 ODBC 2*.x* 드라이버였습니다. (DM) HandleType 인수가 SQL_HANDLE_STMT 드라이버가 유효한 ODBC 드라이버가 아닙니다. |
코멘트
SQLFreeHandle 다음 섹션에 설명된 대로 환경, 연결, 문 및 설명자에 대한 핸들을 해제하는 데 사용됩니다. 핸들에 대한 일반적인 내용은 핸들참조하세요.
애플리케이션이 해제된 후에는 핸들을 사용하면 안 됩니다. 드라이버 관리자는 함수 호출에서 핸들의 유효성을 확인하지 않습니다.
환경 핸들 해제
HandleType SQL_HANDLE_ENV 사용하여 SQLFreeHandle 호출하기 전에 애플리케이션은 환경에서 할당된 모든 연결에 대해 HandleType SQL_HANDLE_DBC SQLFreeHandle 호출해야 합니다. 그렇지 않으면 SQLFreeHandle 호출은 SQL_ERROR 반환하고 환경 및 활성 연결은 유효한 상태로 유지됩니다. 자세한 내용은 환경 핸들 및 환경 핸들할당을 참조하세요.
환경이 공유 환경인 경우
연결 핸들 해제
SQL_HANDLE_DBC HandleType 사용하여 SQLFreeHandle 호출하기 전에 애플리케이션은 이 핸들에 연결이 있는 경우 연결에 SQLDisconnect 호출해야 합니다.* 그렇지 않으면 SQLFreeHandle 호출하면 SQL_ERROR 반환되고 연결이 유효합니다.
자세한 내용은
문 핸들 해제
SQL_HANDLE_STMT
SQLDisconnect 자동으로 연결에서 열린 문과 설명자를 삭제합니다.
설명자 핸들 해제
SQL_HANDLE_DESC
메모
ODBC 2*.x* 드라이버는 설명자 핸들 할당을 지원하지 않는 것처럼 설명자 핸들 해제를 지원하지 않습니다.
SQLDisconnect 자동으로 연결에서 열린 문과 설명자를 삭제합니다. 애플리케이션에서 문 핸들을 해제하면 드라이버는 해당 핸들과 연결된 자동으로 생성된 모든 설명자를 해제합니다.
설명자에 대한 자세한 내용은 설명자참조하세요.
코드 예제
추가 코드 샘플은 SQLBrowseConnect 및 SQLConnect참조하세요.
코드
// SQLFreeHandle.cpp
// compile with: user32.lib odbc32.lib
#include <windows.h>
#include <sqlext.h>
#include <stdio.h>
int main() {
SQLRETURN retCode;
HWND desktopHandle = GetDesktopWindow(); // desktop's window handle
SQLCHAR connStrbuffer[1024];
SQLSMALLINT connStrBufferLen;
// Initialize the environment, connection, statement handles.
SQLHENV henv = NULL; // Environment
SQLHDBC hdbc = NULL; // Connection handle
SQLHSTMT hstmt = NULL; // Statement handle
// Allocate the environment.
retCode = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
// Set environment attributes.
retCode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, -1);
// Allocate the connection.
retCode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
// Set the login timeout.
retCode = SQLSetConnectAttr(hdbc, SQL_LOGIN_TIMEOUT, (SQLPOINTER)10, 0);
// Let the user select the data source and connect to the database.
retCode = SQLDriverConnect(hdbc, desktopHandle, (SQLCHAR *)"Driver={SQL Server}", SQL_NTS, connStrbuffer, 1025, &connStrBufferLen, SQL_DRIVER_PROMPT);
retCode = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
// Free handles, and disconnect.
if (hstmt) {
SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
hstmt = NULL;
}
if (hdbc) {
SQLDisconnect(hdbc);
SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
hdbc = NULL;
}
if (henv) {
SQLFreeHandle(SQL_HANDLE_ENV, henv);
henv = NULL;
}
}
관련 함수
자세한 내용은 | 보다 |
---|---|
핸들 할당 | SQLAllocHandle 함수 |
문 처리 취소 | SQLCancel 함수 |
커서 이름 설정 | SQLSetCursorName 함수 |
참고 항목
ODBC API 참조
ODBC 헤더 파일
샘플 ODBC 프로그램