Sdílet prostřednictvím


Výjimky: Výjimky databáze

Tento článek vysvětluje, jak zpracovávat výjimky databáze.Většinu materiálu v tomto článku platí jak pro práci s třídami knihovny MFC pro třídy knihovny MFC nebo připojení ODBC (Open Database) pro objekty DAO (Data Access Objects).Materiály, které jsou specifické pro jeden nebo jiný model je explicitně označena.Témata zahrnují:

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

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

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

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

Vždy by měl psát obslužné rutiny výjimek, zpracování výjimečných stavů.

Většina pragmatickém přístupu k zachycování výjimek databáze je otestovat vaši aplikaci, s výjimkou scénáře.Určení pravděpodobné, že výjimky, které mohou vyskytnout pro operace v kódu a vynutit výjimku dojít.Potom prozkoumáte výstup trasování, chcete-li zjistit, jaké se výjimka nebo zjistit chyby vrácené informace v ladicím programu.Tímto způsobem zjistíte, které vrátit kódy, které se zobrazí výjimka scénáře, který používáte.

Chybové kódy používané pro ODBC výjimky

Kromě návratové kódy definované rozhraní, které mají názvy formuláře AFX_SQL_ERROR_XXX, některých 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 – framework definované i definované ODBC – databázové třídy můžete vrátit jsou popsány v části m_nRetCode datový člen třídy CDBException.Další informace o návratové kódy definované rozhraní ODBC jsou k dispozici v rozhraní ODBC sady SDK Programmer's Reference v knihovně MSDN.

Chybové kódy používané pro výjimky DAO

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

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

  • m_nAfxDaoError obsahuje rozšířený kód chyby z tříd knihovny MFC rozhraní 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 rozhraní DAO, pokud existuje.Jen zřídka budete potřebovat pracovat s tímto kódem chyby však.Další informace jsou obvykle k dispozici v dalších dvou datových členů.Viz datový člen pro další informace 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é objektu na haldě se nové operátor a pak otevřete sadu záznamů (pro zdroj dat ODBC).Podobný příklad pro třídy rozhraní DAO naleznete v tématu "DAO výjimku" níže uvedený příklad.

Příklad výjimek rozhraní ODBC

Otevřít členské funkce může vyvolat výjimku (typu CDBException pro třídy rozhraní ODBC), takže tento kód v závorkách Otevřít volání s akci blok.Následné ve skutečné blok zachytí CDBException.Může přezkoumat výjimku samotný objekt, nazývá e, ale v tomto případě postačí vědět, že pro vytvoření sady záznamů se nezdařilo.Ve skutečné blok, zobrazí okno se zprávou a vyčistí odstraněním objektu sady záznamů.

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 rozhraní DAO

Příklad rozhraní DAO je podobný příklad pro rozhraní 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 vyvolá výjimku, můžete zkontrolovat datový člen objektu výjimku pro informace o chybě.Stejně jako u předchozího příkladu rozhraní ODBC je pravděpodobně dost znát, že se nezdařil pokus o vytvoření sady záznamů.

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ávy z m_pErrorInfo členský objekt výjimky.MFC vyplní tento člen, když vyhodí výjimku.

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

Při práci s databázemi Microsoft Jet (.mdb) a ve většině případů při práci s ovladačem ODBC bude pouze jeden objekt error.Ve výjimečném případě Pokud používáte zdroj dat ODBC a existuje více chyb, můžete ve smyčce projít na základě počtu chyb vrácené kolekci Errors DAO na CDaoException::GetErrorCount.Při každém průchodu smyčkou, volání CDaoException::GetErrorInfo k doplnění m_pErrorInfo datový člen.

Viz také

Koncepty

Zpracování výjimek v prostředí MFC