CDBException 클래스
데이터베이스 클래스에서 발생하는 예외 상태를 나타냅니다.
구문
class CDBException : public CException
멤버
공용 데이터 멤버
속성 | 설명 |
---|---|
CDBException::m_nRetCode | RETCODE 형식의 ODBC(Open Database Connectivity) 반환 코드를 포함합니다. |
CDBException::m_strError | 영숫자 용어의 오류를 설명하는 문자열을 포함합니다. |
CDBException::m_strStateNativeOrigin | ODBC에서 반환된 오류 코드와 관련하여 오류를 설명하는 문자열을 포함합니다. |
설명
클래스에는 예외의 원인을 확인하거나 예외를 설명하는 문자 메시지를 표시하는 데 사용할 수 있는 두 개의 공용 데이터 멤버가 포함됩니다. CDBException
개체는 데이터베이스 클래스의 멤버 함수에 의해 생성되고 throw됩니다.
참고 항목
이 클래스는 MFC의 ODBC(Open Database Connectivity) 클래스 중 하나입니다. 대신 최신 DAO(Data Access Objects) 클래스를 사용하는 경우 CDaoException을 대신 사용합니다. 모든 DAO 클래스 이름에는 접두사로 "CDao"가 있습니다. 자세한 내용은 개요: 데이터베이스 프로그래밍 문서를 참조하세요.
예외는 데이터 원본 또는 네트워크 I/O 오류와 같이 프로그램 제어 외부의 조건과 관련된 비정상적인 실행의 경우입니다. 프로그램을 실행하는 일반적인 과정에서 발생할 수 있는 오류는 일반적으로 예외로 간주되지 않습니다.
CATCH 식의 범위 내에서 이러한 개체에 액세스할 수 있습니다. 전역 함수를 사용하여 사용자 고유의 코드에서 개체를 throw CDBException
할 AfxThrowDBException
수도 있습니다.
일반적인 예외 처리 또는 개체에 대한 CDBException
자세한 내용은 MFC(예외 처리) 및 예외: 데이터베이스 예외 문서를 참조하세요.
상속 계층 구조
CDBException
요구 사항
헤더: afxdb.h
CDBException::m_nRetCode
ODBC API(애플리케이션 프로그래밍 인터페이스) 함수에서 반환하는 RETCODE 형식의 ODBC 오류 코드를 포함합니다.
설명
이 형식에는 ODBC에서 정의한 SQL 접두사 코드와 데이터베이스 클래스에서 정의한 AFX_SQL 접두사 코드가 포함됩니다. 이 멤버의 CDBException
경우 다음 값 중 하나가 포함됩니다.
AFX_SQL_ERROR_API_CONFORMANCE 호출
CDatabase::Open
용CDatabase::OpenEx
드라이버가 필요한 ODBC API 규칙 수준 1(SQL_OAC_LEVEL1)을 준수하지 않습니다.AFX_SQL_ERROR_CONNECT_FAIL 데이터 원본에 대한 연결이 실패했습니다. NULL
CDatabase
포인터를 레코드 집합 생성자에 전달하고 실패를 기반으로GetDefaultConnect
연결을 만들려는 후속 시도를 전달했습니다.AFX_SQL_ERROR_DATA_TRUNCATED 스토리지를 제공한 것보다 많은 데이터를 요청했습니다. 제공된 데이터 스토리지 또는
CByteArray
데이터 형식을 늘리는 방법에 대한CString
자세한 내용은 "매크로 및 전역"에서 RFX_Text 및 RFX_Binary 대한 인수를 참조nMaxLength
하세요.AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED 다이나셋을
CRecordset::Open
요청하는 호출이 실패했습니다. 드라이버에서 다이내셋을 지원하지 않습니다.AFX_SQL_ERROR_EMPTY_COLUMN_LIST 테이블을 열려고 했지만(또는 지정한 내용을 프로시저 호출 또는 SELECT 문으로 식별할 수 없음) 재정의에 RFX(레코드 필드 교환) 함수 호출에서
DoFieldExchange
식별된 열이 없습니다.AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH 재정의의 RFX 함수
DoFieldExchange
형식이 레코드 집합의 열 데이터 형식과 호환되지 않습니다.AFX_SQL_ERROR_ILLEGAL_MODE 이전에 호출하거나
CRecordset::Edit
호출하지 않고 호출CRecordset::AddNew
CRecordset::Update
했습니다.AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED ODBC 드라이버가 잠금을 지원하지 않으므로 업데이트에 대한 레코드 잠금 요청을 수행할 수 없습니다.
AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED 고유 키가 없는 테이블을 호출
CRecordset::Update
하거나Delete
여러 레코드를 변경했습니다.AFX_SQL_ERROR_NO_CURRENT_RECORD 이전에 삭제된 레코드를 편집하거나 삭제하려고 했습니다. 삭제 후 새 현재 레코드로 스크롤해야 합니다.
AFX_SQL_ERROR_NO_POSITIONED_UPDATES ODBC 드라이버가 위치 업데이트를 지원하지 않으므로 다이나셋에 대한 요청을 처리할 수 없습니다.
AFX_SQL_ERROR_NO_ROWS_AFFECTED 호출
CRecordset::Update
하거나Delete
작업을 시작했을 때 레코드를 더 이상 찾을 수 없습니다.AFX_SQL_ERROR_ODBC_LOAD_FAILED ODBC.DLL 로드하지 못했습니다. Windows에서 이 DLL을 찾을 수 없거나 로드할 수 없습니다. 이 오류는 치명적입니다.
AFX_SQL_ERROR_ODBC_V2_REQUIRED 수준 2 규격 ODBC 드라이버가 필요하기 때문에 다이나셋에 대한 요청을 처리할 수 없습니다.
AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY 데이터 원본이 뒤로 스크롤을 지원하지 않으므로 스크롤 시도가 성공하지 못했습니다.
AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED 스냅샷 요청에 대한
CRecordset::Open
호출이 실패했습니다. 스냅샷은 드라이버에서 지원되지 않습니다. ODBC 커서 라이브러리 ODBCCURS.DLL 없는 경우에만 발생합니다.AFX_SQL_ERROR_SQL_CONFORMANCE 호출에 대한
CDatabase::OpenEx
CDatabase::Open
드라이버가 필요한 ODBC SQL 규칙 수준 "최소"(SQL_OSC_MINIMUM)를 준수하지 않습니다.AFX_SQL_ERROR_SQL_NO_TOTAL ODBC 드라이버에서 데이터 값의
CLongBinary
총 크기를 지정할 수 없습니다. 전역 메모리 블록을 미리 할당할 수 없어 작업이 실패했을 수 있습니다.AFX_SQL_ERROR_RECORDSET_READONLY 읽기 전용 레코드 집합을 업데이트하려고 했거나 데이터 원본이 읽기 전용입니다. 연결된 레코드 집합 또는
CDatabase
개체를 사용하여 업데이트 작업을 수행할 수 없습니다.SQL_ERROR 함수가 실패했습니다. ODBC 함수
SQLError
에서 반환된 오류 메시지는 데이터 멤버에m_strError
저장됩니다.SQL_INVALID_HANDLE 함수가 잘못된 환경 핸들, 연결 핸들 또는 문 핸들로 인해 실패했습니다. 이는 프로그래밍 오류를 나타냅니다. ODBC 함수
SQLError
에서 추가 정보를 사용할 수 없습니다.
SQL 접두사 코드는 ODBC에 의해 정의됩니다. AFX 접두사 코드는 AFXDB에 정의됩니다. H는 MFC\INCLUDE에 있습니다.
CDBException::m_strError
예외를 발생시킨 오류를 설명하는 문자열을 포함합니다.
설명
문자열은 영숫자 용어의 오류를 설명합니다. 자세한 내용 및 예제는 다음을 참조하세요 m_strStateNativeOrigin
.
CDBException::m_strStateNativeOrigin
예외를 발생시킨 오류를 설명하는 문자열을 포함합니다.
설명
문자열은 "State:%s,Native:%ld,Origin:%s" 형식입니다. 여기서 형식 코드는 순서대로 다음을 설명하는 값으로 바뀝니다.
ODBC 함수
SQLError
의 szSqlState 매개 변수에 반환된 5자 오류 코드를 포함하는 null로 끝나는 문자열인 SQLSTATE입니다. SQLSTATE 값은 부록 A, ODBC 오류 코드, ODBC 프로그래머 참조에 나열됩니다. 예: "S0022".함수의 pfNativeError 매개 변수
SQLError
에 반환된 데이터 원본과 관련된 네이티브 오류 코드입니다. 예: 207.함수의 szErrorMsg 매개 변수
SQLError
에 반환된 오류 메시지 텍스트입니다. 이 메시지는 여러 개의 대괄호로 묶인 이름으로 구성됩니다. 원본에서 사용자에게 오류가 전달되면 각 ODBC 구성 요소(데이터 원본, 드라이버, 드라이버 관리자)에 고유한 이름이 추가됩니다. 이 정보는 오류의 출처를 정확히 파악하는 데 도움이 됩니다. 예: [Microsoft][ODBC SQL Server 드라이버][SQL Server]
프레임워크는 오류 문자열을 해석하고 해당 구성 요소를 배치 m_strStateNativeOrigin
합니다. 둘 이상의 오류에 대한 정보가 포함된 경우 m_strStateNativeOrigin
오류는 줄 바꿈으로 구분됩니다. 프레임워크는 영숫자 오류 텍스트를 .에 넣습니다 m_strError
.
이 문자열 을 구성하는 데 사용되는 코드에 대한 자세한 내용은 ODBC 프로그래머 참조의 SQLError 함수 를 참조하세요.
예시
ODBC에서: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] 잘못된 열 이름 'ColName'"
In m_strStateNativeOrigin
: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server]"
In m_strError
: "Invalid column name 'ColName'"
참고 항목
CException 클래스
계층 구조 차트
CDatabase 클래스
CRecordset 클래스
CFieldExchange 클래스
CRecordset::Update
CRecordset::D 삭제
CException 클래스