Sdílet prostřednictvím


Výjimky: Výjimky databáze

Tento článek vysvětluje způsob zpracování databáze výjimky.Většina materiálu v tomto článku platí při práci s tříd MFC pro připojení ODBC (Open Database) nebo tříd MFC pro objekty DAO (Data Access Objects).Výslovně označen jako materiál, které jsou specifické pro jednu nebo jiný model.Témata zahrnují:

  • Přístupy ke zpracování výjimek

  • Na příklad zpracování výjimek v databázi

Přístupy ke zpracování výjimek

Postup je stejný, ať pracujete s DAO nebo ODBC.

Vždy byste měli zapsat popisovačích výjimek výjimečných podmínek zpracování.

Většina pragmatickém přístupu k zachycení výjimky databáze je testovat aplikaci s výjimkou scénáře.Určete pravděpodobný výjimky, které může nastat v kódu operace a vynutit výjimek dochází.Poté zkontrolujte výstup trasování a zjistěte, jaké výjimka nebo zkontrolovat chyby vrácené informace v debuggeru.Tímto způsobem zjistíte, vraťte se kódy, které se zobrazí výjimka scénářů, které používáte.

19b8k939.collapse_all(cs-cz,VS.110).gifChybové kódy používané pro výjimky ODBC

Kromě definované v rámci návratové kódy, které mají názvy formuláře AFX_SQL_ERROR_XXX, některé CDBExceptions jsou založeny na ODBC návratových kódů.Návratové kódy pro tyto výjimky mají názvy formuláře SQL_ERROR_XXX.

Návratové kódy – i definované v rámci definované ODBC –, jsou popsány v části třídy databáze můžete vrátit m_nRetCode datový člen třídy CDBException.Další informace o návratové kódy definované ODBC je k dispozici v sadě SDK ODBC Programmer's Reference v knihovně MSDN.

19b8k939.collapse_all(cs-cz,VS.110).gifChybové kódy používané pro výjimky DAO

DAO výjimky je obvykle k dispozici další informace.Informace o chybě můžete přistupovat prostřednictvím dat tři členy uloveny CDaoException objekt:

  • m_pErrorInfo obsahuje ukazatel na CDaoErrorInfo objekt, který zapouzdří informace o chybě v DAO v kolekci objektů chyba přidruženými k databázi.

  • m_nAfxDaoError obsahuje rozšířený kód chyby z tříd MFC DAO.Tyto kódy chyb, které mají názvy formuláře AFX_DAO_ERROR_XXX, jsou popsány v části datový člen v CDaoException.

  • m_scode obsahuje OLE SCODE z DAO, popřípadě.Zřídka budete muset však pracovat se tento kód chyby.Další informace je obvykle k dispozici v dalších dvou datové členy.Datový člen Další informace viz o SCODE hodnoty.

Další informace o chybách, typ objektu DAO chyby a kolekce DAO Errors DAO je k dispozici v rámci třídy CDaoException.

Příklad zpracování výjimek databáze

V následujícím příkladu se pokusí vytvořit CRecordset-odvozené objekt na haldy se nové operátor a otevřít sadu záznamů (pro zdroj dat ODBC).Podobný příklad třídy DAO viz "DAO výjimka" následující příklad.

19b8k939.collapse_all(cs-cz,VS.110).gifPříklad výjimek ODBC

Otevřít členské funkce může vyvolat výjimku (typu CDBException pro třídy ODBC), tak tento kód závorky Otevřít volání s akci bloku.Následné úlovku bloku zachytí CDBException.Nelze zkontrolovat výjimku samotný objekt, nazývá e, ale v tomto případě je dostatečně vědět, že vytvoření sady záznamů se nezdařilo.Úlovku bloku zobrazí okno se zprávou a vyčistí odstraněním objektu recordset.

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(cs-cz,VS.110).gifPříklad výjimek DAO

Příklad DAO podobný příklad pro ODBC, ale obvykle můžete načíst další druhy informací.Následující kód se také pokusí otevřít sadu záznamů.Pokud tento pokus o výjimku, můžete zkontrolovat datový člen objektu výjimku pro informace o chybě.Jako v předchozím příkladu ODBC je pravděpodobně dostatek vědět, že pokus o vytvoření sady záznamů se nezdařilo.

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;
}

Tento kód načte řetězec chybová zpráva z m_pErrorInfo členský objekt výjimky.MFC vyplní tento člen, pokud ji výjimku.

Diskusi o chyby vrácené CDaoException objekt, viz třídy CDaoException a CDaoErrorInfo.

Při práci s databází Microsoft Jet (MDB) a ve většině případů při práci s ovladačem ODBC bude obsahovat pouze jeden objekt chyba.Ve vzácných případech při použití zdroje dat ODBC a více chyb lze propracovat přes kolekce Errors DAO na základě číslo chyby vrácené CDaoException::GetErrorCount.Při každém průchodu smyčkou je volání CDaoException::GetErrorInfo k doplnění m_pErrorInfo datový člen.

Viz také

Koncepty

Zpracování výjimek v MFC