예외: 데이터베이스 예외

이 문서에서는 데이터베이스 예외를 처리 하는 방법을 설명 합니다.대부분은이 문서에서는 MFC 클래스를 개방형 데이터베이스 연결 (ODBC) 또는 MFC 클래스에 대 한 데이터 액세스 개체 (DAO)에 대 한 작업에 관계 없이 적용 됩니다.하나 또는 다른 모델 관련 자료를 명시적으로 표시 되어 있습니다.다음 내용을 다룹니다.

  • 예외 처리 방법

  • 데이터베이스 예외 처리 예제를

예외 처리 방법

DAO 또는 ODBC로 작업에 관계 없이 방법은 동일 합니다.

항상 예외 조건을 처리 하도록 예외 처리기를 작성 해야 합니다.

데이터베이스 예외를 catch 하는 가장 실용적인 방법은 예외 시나리오와 응용 프로그램을 테스트 하는 것.작업 코드에서 발생 하 여 예외가 발생 하도록 강제 하는 예외를 확인 합니다.그런 다음 throw 된 예외를 볼 수 있는 추적 출력을 검사 하거나 디버거에서 반환 된 오류 정보를 검사 합니다.반환 코드를 사용 하 여 예외 시나리오에 대해 확인 해야 알 수 있습니다.

19b8k939.collapse_all(ko-kr,VS.110).gifODBC 예외에 사용 된 오류 코드

형식의 이름이 있는 반환 코드 외에, 프레임 워크에 의해 정의 된 AFX_SQL_ERROR_XXX, 일부 CDBExceptions 에 따라 ODBC 반환 코드입니다.이러한 예외에 대 한 반환 코드 형식의 이름이 있는 SQL_ERROR_XXX.

반환 코드-정의 프레임 워크와 ODBC 정의 —는 문서화에서 데이터베이스 클래스를 반환할 수는 m_nRetCode 클래스의 데이터 멤버 CDBException.ODBC가 정의한 반환 코드에 대 한 자세한 내용은 ODBC SDK에서 사용할 수 프로그래머용 참조 에서 MSDN Library입니다.

19b8k939.collapse_all(ko-kr,VS.110).gifDAO 예외에 사용 된 오류 코드

DAO 예외에 대 한 자세한 정보는 일반적으로 사용할 수 있습니다.Caught의 세 가지 데이터 멤버를 통해 오류 정보를 액세스할 수 있습니다 CDaoException 개체:

  • m_pErrorInfo 에 대 한 포인터를 포함 한 CDaoErrorInfo DAO의 컬렉션의 데이터베이스와 연관 된 error 개체에 오류 정보를 캡슐화 하는 개체입니다.

  • m_nAfxDaoError MFC DAO 클래스에서 확장 된 오류 코드를 포함 합니다.형식의 이름이 있어야 합니다. 이러한 오류 코드를 AFX_DAO_ERROR_XXX, 데이터 구성원 아래에서 설명 하는 CDaoException.

  • m_scode OLE 포함 SCODE 해당 하는 경우 DAO에서.그러나 거의 오류 코드로 작업 해야 합니다.일반적으로 다른 두 데이터 멤버에서 자세한 정보가 없습니다.자세한 내용은 데이터 멤버를 참조 하십시오에 대 한 SCODE 값입니다.

DAO 오류, DAO 오류 개체 유형, 및 DAO Errors 컬렉션에 대 한 추가 정보는 클래스에서 CDaoException.

데이터베이스 예외 처리 예제

다음 예제를 생성 하려고 시도 CRecordset-파생 개체와 힙에 연산자 및 레코드 집합 (ODBC 데이터 원본)에 대해 다음 열기.DAO 클래스에 대 한 유사한 예제를 "DAO 예외 예제" 아래를 참조 하십시오.

19b8k939.collapse_all(ko-kr,VS.110).gifODBC 예외 예제

열기 멤버 함수는 예외를 throw 할 수 있습니다 (형식의 CDBException ODBC 클래스에 대 한), 따라서이 대괄호 코드는 열기 호출에 시도 블록.피드 catch 는 catch 블록은 CDBException.라는 예외 개체 자체를 검사할 수 있습니다 e, 하지만 경우 레코드 집합을 만드는 데는 실패 했다는 알 수 있을 정도로입니다.Catch 블록 메시지 상자를 표시 하 고 레코드 집합 개체를 삭제 하 여 정리 합니다.

CRecordset* CMyDatabaseDoc::GetRecordset()
{
   CCourses* pSet = new CCourses(&m_dbCust);
   try
   {
      pSet->Open();
   }
   catch(CDBException* e)
   {
      AfxMessageBox(e->m_strError, MB_ICONEXCLAMATION);
      // Delete the incomplete recordset object
      delete pSet;
      pSet = NULL;
      e->Delete();
   }
   return pSet;
}

19b8k939.collapse_all(ko-kr,VS.110).gifDAO 예외 예제

DAO 예제는 ODBC, 비슷하지만 일반적으로 더 많은 종류의 정보를 검색할 수 있습니다.다음 코드는 또한 레코드 집합을 열려면 시도 합니다.시도 예외를 throw 하는 경우 예외 오류 정보에 대 한 개체의 데이터 멤버를 검사할 수 있습니다.앞의 ODBC 예제에서는 아마도 그대로 부족 하 여 recordset을 만드는 데 실패 했다는 것을 알아야 합니다.

CDaoRecordset* CMyDaoDatabaseDoc::GetRecordset()
{
   CDaoRecordset* pSet = new CCustSet(&m_db);
   try
   {
      pSet->Open();
   }
   catch(CDaoException* pe)
   {
      AfxMessageBox(pe->m_pErrorInfo->m_strDescription, MB_ICONEXCLAMATION);
      // Delete the incomplete recordset object
      delete pSet;
      pSet = NULL;
      pe->Delete();
   }
   return pSet;
}

이 코드에서 오류 메시지 문자열을 가져옵니다는 m_pErrorInfo 예외 개체의 구성원입니다.MFC는 예외를 throw 하는 경우이 멤버를 채웁니다.

토론의 반환 된 오류 정보에는 CDaoException 개체, 클래스를 참조 하십시오. CDaoExceptionCDaoErrorInfo.

ODBC로 작업 하는 경우 대부분의 Microsoft Jet (.mdb) 데이터베이스와 작업 중인 경우 하나의 오류 개체가 됩니다.드문 경우에 ODBC 데이터 소스를 사용 하는 여러 개의 오류가 있을 경우 DAO의 Errors 컬렉션에서 반환한 오류 횟수에 따라 반복 수 있습니다 CDaoException::GetErrorCount.호출 하는 루프가 반복 될 때마다 CDaoException::GetErrorInfo 리필 하는 m_pErrorInfo 데이터 멤버입니다.

참고 항목

개념

MFC에서 처리 하는 예외