데이터베이스 클래스에서 발생하는 예외 상태를 나타냅니다.
구문
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::AddNewCRecordset::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::OpenExCDatabase::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 클래스