다음을 통해 공유


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 CDBExceptionAfxThrowDBException 수도 있습니다.

일반적인 예외 처리 또는 개체에 대한 CDBException 자세한 내용은 MFC(예외 처리)예외: 데이터베이스 예외 문서를 참조하세요.

상속 계층 구조

CObject

CException

CDBException

요구 사항

헤더: afxdb.h

CDBException::m_nRetCode

ODBC API(애플리케이션 프로그래밍 인터페이스) 함수에서 반환하는 RETCODE 형식의 ODBC 오류 코드를 포함합니다.

설명

이 형식에는 ODBC에서 정의한 SQL 접두사 코드와 데이터베이스 클래스에서 정의한 AFX_SQL 접두사 코드가 포함됩니다. 이 멤버의 CDBException경우 다음 값 중 하나가 포함됩니다.

  • AFX_SQL_ERROR_API_CONFORMANCE 호출 CDatabase::OpenCDatabase::OpenEx 드라이버가 필요한 ODBC API 규칙 수준 1(SQL_OAC_LEVEL1)을 준수하지 않습니다.

  • AFX_SQL_ERROR_CONNECT_FAIL 데이터 원본에 대한 연결이 실패했습니다. NULL CDatabase 포인터를 레코드 집합 생성자에 전달하고 실패를 기반으로 GetDefaultConnect 연결을 만들려는 후속 시도를 전달했습니다.

  • AFX_SQL_ERROR_DATA_TRUNCATED 스토리지를 제공한 것보다 많은 데이터를 요청했습니다. 제공된 데이터 스토리지 또는 CByteArray 데이터 형식을 늘리는 방법에 대한 CString 자세한 내용은 "매크로 및 전역"에서 RFX_TextRFX_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 클래스