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.
Chybové 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.
Chybové 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.
Pří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;
}
Pří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.