Sdílet prostřednictvím


CDBException – třída

Představuje podmínku výjimky vyplývající z databázových tříd.

Syntaxe

class CDBException : public CException

Členové

Veřejné datové členy

Jméno popis
CDBException::m_nRetCode Obsahuje návratový kód ODBC (Open Database Připojení ivity) typu RETCODE.
CDBException::m_strError Obsahuje řetězec, který popisuje chybu v alfanumerických termínech.
CDBException::m_strStateNativeOrigin Obsahuje řetězec popisující chybu z hlediska kódů chyb vrácených rozhraním ODBC.

Poznámky

Třída obsahuje dva veřejné datové členy, které můžete použít k určení příčiny výjimky nebo k zobrazení textové zprávy popisující výjimku. CDBException objekty jsou sestaveny a vyvolány členskými funkcemi databázových tříd.

Poznámka

Tato třída je jednou z tříd open database knihovny MFC Připojení ivity (ODBC). Pokud místo toho používáte novější třídy DAO (Data Access Objects), použijte místo toho CDaoException . Všechny názvy tříd DAO mají jako předponu CDao. Další informace naleznete v článku Přehled: Programování databáze.

Výjimky jsou případy neobvyklého spuštění zahrnující podmínky mimo kontrolu programu, jako jsou zdroje dat nebo chyby vstupně-výstupních operací sítě. Chyby, které můžete očekávat v normálním průběhu provádění programu, se obvykle nepovažují za výjimky.

K těmto objektům můžete přistupovat v rámci oboru výrazu CATCH . Objekty můžete také vyvolat CDBException z vlastního AfxThrowDBException kódu pomocí globální funkce.

Další informace o zpracování výjimek obecně nebo o CDBException objektech naleznete v článcích Zpracování výjimek (MFC) a Výjimky: Výjimky databáze.

Hierarchie dědičnosti

Objekt CObject

CException

CDBException

Požadavky

Hlavička: afxdb.h

CDBException::m_nRetCode

Obsahuje kód chyby ODBC typu RETCODE vrácený funkcí rozhraní API (Application Programming Interface).

Poznámky

Tento typ zahrnuje kódy s předponou SQL definované rozhraním ODBC a kódy s předponou AFX_SQL definované třídami databáze. Pro člena CDBExceptionbude obsahovat jednu z následujících hodnot:

  • AFX_SQL_ERROR_API_CONFORMANCE Ovladač pro CDatabase::OpenEx volání neodpovídá CDatabase::Open požadované úrovni shody rozhraní ODBC API 1 (SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL Připojení ke zdroji dat došlo k chybě. Do konstruktoru sady záznamů jste předali ukazatel NULL CDatabase a následný pokus o vytvoření připojení na GetDefaultConnect základě selhání.

  • AFX_SQL_ERROR_DATA_TRUNCATED jste požadovali více dat, než jste zadali úložiště. Informace o zvýšení poskytnutého úložiště dat pro CString datové typy nebo CByteArray datových typů najdete v argumentu nMaxLength RFX_Text a RFX_Binary v části Makra a globální hodnoty.

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Volání CRecordset::Open žádosti o dynaset se nezdařilo. Ovladač nepodporuje dynasety.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST Pokusili jste se otevřít tabulku (nebo to, co jste zadali, nebylo možné identifikovat jako volání procedury nebo příkaz SELECT ), ale v DoFieldExchange přepsání nejsou žádné sloupce identifikované ve volání funkce RFX (Record Field Exchange).

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH Typ funkce RFX v přepsání DoFieldExchange není kompatibilní s datovým typem sloupce v sadě záznamů.

  • AFX_SQL_ERROR_ILLEGAL_MODE Volal CRecordset::Update jste bez předchozího volání CRecordset::AddNew nebo CRecordset::Edit.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED Požadavek na uzamčení záznamů pro aktualizaci nelze splnit, protože ovladač ODBC nepodporuje uzamčení.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED Jste volali CRecordset::Update nebo Delete jste pro tabulku bez jedinečného klíče a změnili více záznamů.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD Jste se pokusili upravit nebo odstranit dříve odstraněný záznam. Po odstranění se musíte posunout na nový aktuální záznam.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES Požadavek na dynaset nelze splnit, protože ovladač ODBC nepodporuje umístěné aktualizace.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED Volali CRecordset::Update jste nebo Delete, ale když operace začala záznam již nebyla nalezena.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED Pokus o načtení knihovny ODBC.DLL se nezdařil; Systém Windows nemohl najít nebo nemohl načíst tuto knihovnu DLL. Tato chyba je závažná.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED Požadavek na dynaset nelze splnit, protože je vyžadován ovladač ODBC kompatibilní s úrovní 2.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY Pokus o posouvání nebyl úspěšný, protože zdroj dat nepodporuje zpětné posouvání.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED volání CRecordset::Open žádosti o snímek se nezdařilo. Ovladač nepodporuje snímky. (K tomu by mělo dojít pouze v případě, že není k dispozici knihovna kurzorů ODBCCURS.DLL.)

  • AFX_SQL_ERROR_SQL_CONFORMANCE ovladač pro CDatabase::OpenEx volání neodpovídá CDatabase::Open požadované úrovni shody ODBC SQL s minimální úrovní (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL ovladač ODBC nemohl určit celkovou velikost CLongBinary datové hodnoty. Operace pravděpodobně selhala, protože globální blok paměti nelze předem přidělit.

  • AFX_SQL_ERROR_RECORDSET_READONLY Pokusili jste se aktualizovat sadu záznamů jen pro čtení nebo je zdroj dat jen pro čtení. Nelze provádět žádné operace aktualizace se sadou záznamů nebo objektem CDatabase , ke kterým je přidružen.

  • SQL_ERROR funkce se nezdařila. Chybová zpráva vrácená funkcí SQLError ODBC je uložena v datovém členu m_strError .

  • SQL_INVALID_HANDLE funkce selhala kvůli neplatnému popisovači prostředí, popisovači připojení nebo popisovači příkazu. To značí chybu programování. Z funkce SQLErrorODBC nejsou k dispozici žádné další informace .

Kódy s předponou SQL jsou definovány rozhraním ODBC. Kódy s předponou AFX jsou definovány v AFXDB. H, nachází se v PROSTŘEDÍ MFC\INCLUDE.

CDBException::m_strError

Obsahuje řetězec popisující chybu, která způsobila výjimku.

Poznámky

Řetězec popisuje chybu v alfanumerických termínech. Podrobnější informace a příklad najdete v tématu m_strStateNativeOrigin.

CDBException::m_strStateNativeOrigin

Obsahuje řetězec popisující chybu, která způsobila výjimku.

Poznámky

Řetězec je ve formátu "State:%s,Native:%ld,Origin:%s", kde jsou kódy formátu v pořadí nahrazeny hodnotami, které popisují:

  • SQLSTATE, řetězec ukončený hodnotou null obsahující kód chyby s pěti znaky vrácený v parametru szSqlState funkce SQLErrorODBC . Hodnoty SQLSTATE jsou uvedeny v dodatku A, kódy chyb ODBC v odkazu programátora ODBC. Příklad: "S0022".

  • Nativní kód chyby specifický pro zdroj dat vrácený v parametru SQLError pfNativeError funkce. Příklad: 207.

  • Text chybové zprávy vrácený v parametru SQLError szErrorMsg funkce. Tato zpráva se skládá z několika závorek. Při předávání chyby ze zdroje uživateli připojí každá komponenta ODBC (zdroj dat, ovladač, Správce ovladačů) vlastní název. Tyto informace pomáhají určit původ chyby. Příklad: [Microsoft][Ovladač ODBC SQL Serveru][SQL Server] [SQL Server]

Architektura interpretuje řetězec chyby a vkládá její komponenty do m_strStateNativeOrigin; pokud m_strStateNativeOrigin obsahuje informace pro více než jednu chybu, chyby jsou odděleny novými spojnicemi. Architektura vloží alfanumerický text chyby do m_strError.

Další informace o kódech použitých k vytvoření tohoto řetězce naleznete v tématu FUNKCE SQLError v odkazech programátora ODBC.

Příklad

Z rozhraní ODBC: State:S0022,Native:207,Origin:[Microsoft][Ovladač SQL Serveru ODBC][SQL Server] Neplatný název sloupce ColName

V m_strStateNativeOrigin: "State:S0022,Native:207;Origin:[Microsoft][ODBC SQL Server Driver][SQL Server][ SQL Server]"

V m_strError: Neplatný název sloupce ColName

Viz také

CException – třída
Graf hierarchie
CDatabase – třída
CRecordset – třída
CFieldExchange – třída
CRecordset::Update
CRecordset::D elete
CException – třída