Share via


CDBException-klasse

Opmerking

De Microsoft Foundation Classes-bibliotheek (MFC) wordt nog steeds ondersteund. We voegen echter geen functies meer toe of werken de documentatie bij.

Vertegenwoordigt een uitzonderingsvoorwaarde die voortvloeit uit de databaseklassen.

Syntaxis

class CDBException : public CException

Leden

Leden van openbare gegevens

Naam Description
CDBException::m_nRetCode Bevat een ODBC-retourcode (Open Database Connectivity) van het type RETCODE.
CDBException::m_strError Bevat een tekenreeks die de fout in alfanumerieke termen beschrijft.
CDBException::m_strStateNativeOrigin Bevat een tekenreeks die de fout beschrijft in termen van de foutcodes die door ODBC worden geretourneerd.

Opmerkingen

De klasse bevat twee leden van openbare gegevens die u kunt gebruiken om de oorzaak van de uitzondering te bepalen of om een tekstbericht weer te geven waarin de uitzondering wordt beschreven. CDBException objecten worden samengesteld en gegenereerd door lidfuncties van de databaseklassen.

Opmerking

Deze klasse is een van de ODBC-klassen (Open Database Connectivity) van MFC. Als u in plaats daarvan de nieuwere DAO-klassen (Data Access Objects) gebruikt, gebruikt u in plaats daarvan CDaoException . Alle DAO-klassenamen hebben 'CDao' als voorvoegsel. Zie het artikel Overzicht: Databaseprogrammering voor meer informatie.

Uitzonderingen zijn gevallen van abnormale uitvoering waarbij omstandigheden buiten het beheer van het programma vallen, zoals gegevensbron- of netwerk-I/O-fouten. Fouten die u in de normale loop van het uitvoeren van uw programma zou verwachten, worden meestal niet als uitzonderingen beschouwd.

U kunt deze objecten openen binnen het bereik van een CATCH-expressie . U kunt ook objecten uit uw eigen code gooien CDBException met de AfxThrowDBException globale functie.

Zie de artikelen Exception Handling (MFC) en Uitzonderingen: Database-uitzonderingen voor meer informatie over het verwerken van uitzonderingen in het algemeen of over CDBException objecten.

Overnamehiërarchie

CObject

CException

CDBException

Requirements

Koptekst: afxdb.h

CDBException::m_nRetCode

Bevat een ODBC-foutcode van het type RETCODE dat wordt geretourneerd door een API-functie (ODBC Application Programming Interface).

Opmerkingen

Dit type bevat SQL-voorvoegsels die zijn gedefinieerd door ODBC en AFX_SQL-voorvoegselcodes die zijn gedefinieerd door de databaseklassen. Voor een CDBException, dit lid bevat een van de volgende waarden:

  • AFX_SQL_ERROR_API_CONFORMANCE Het stuurprogramma voor een CDatabase::OpenEx of CDatabase::Open aanroep voldoet niet aan de vereiste ODBC API-conformheidsniveau 1 (SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL verbinding met de gegevensbron is mislukt. U hebt een NULL-aanwijzer CDatabase doorgegeven aan de constructor van uw recordset en de volgende poging om een verbinding te maken op GetDefaultConnect basis van mislukt.

  • AFX_SQL_ERROR_DATA_TRUNCATED U hebt meer gegevens aangevraagd dan waarvoor u opslag hebt opgegeven. Zie het nMaxLength argument voor RFX_Text en RFX_Binary onder 'Macro's en globals' voor informatie over het vergroten van de opgegeven gegevensopslag voor CString of CByteArray gegevenstypen.

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Een aanroep voor CRecordset::Open het aanvragen van een dynaset is mislukt. Dynasets worden niet ondersteund door de bestuurder.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST U hebt geprobeerd een tabel te openen (of wat u hebt opgegeven, kan niet worden geïdentificeerd als procedure-aanroep of SELECT-instructie ), maar er zijn geen kolommen geïdentificeerd in rfx-functie-aanroepen (Record Field Exchange) in uw DoFieldExchange onderdrukking.

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH Het type RFX-functie in uw DoFieldExchange onderdrukking is niet compatibel met het kolomgegevenstype in de recordset.

  • AFX_SQL_ERROR_ILLEGAL_MODE U hebt gebeld CRecordset::Update zonder eerder te bellen CRecordset::AddNew of CRecordset::Edit.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED Uw aanvraag voor het vergrendelen van records voor update kan niet worden uitgevoerd omdat uw ODBC-stuurprogramma geen ondersteuning biedt voor vergrendeling.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED U hebt een tabel aangeroepen CRecordset::Update of Delete zonder unieke sleutel en meerdere records gewijzigd.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD U hebt geprobeerd een eerder verwijderde record te bewerken of te verwijderen. U moet na een verwijdering naar een nieuwe huidige record schuiven.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES Uw aanvraag voor een dynaset kan niet worden uitgevoerd omdat uw ODBC-stuurprogramma geen ondersteuning biedt voor positionele updates.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED U hebt aangeroepen CRecordset::Update of Delete, maar wanneer de bewerking is gestart, kan de record niet meer worden gevonden.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED Een poging om de ODBC.DLL te laden is mislukt; Windows kan deze DLL niet vinden of niet laden. Deze fout is fataal.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED Uw aanvraag voor een dynaset kan niet worden uitgevoerd omdat een ODBC-stuurprogramma op niveau 2 is vereist.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY Een poging om te schuiven is mislukt omdat de gegevensbron geen ondersteuning biedt voor achteruit schuiven.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED Een aanroep voor CRecordset::Open het aanvragen van een momentopname is mislukt. Momentopnamen worden niet ondersteund door het stuurprogramma. (Dit moet alleen gebeuren wanneer de ODBC-cursorbibliotheek ODBCCURS.DLL niet aanwezig is.)

  • AFX_SQL_ERROR_SQL_CONFORMANCE Het stuurprogramma voor een CDatabase::OpenEx of CDatabase::Open aanroep voldoet niet aan het vereiste ODBC SQL-nalevingsniveau van 'Minimum' (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL Het ODBC-stuurprogramma kan de totale grootte van een CLongBinary gegevenswaarde niet opgeven. De bewerking is waarschijnlijk mislukt omdat een globaal geheugenblok niet vooraf kan worden toegewezen.

  • AFX_SQL_ERROR_RECORDSET_READONLY U hebt geprobeerd een recordset met het kenmerk Alleen-lezen bij te werken of de gegevensbron is alleen-lezen. Er kunnen geen updatebewerkingen worden uitgevoerd met de recordset of het CDatabase object waarmee het is gekoppeld.

  • SQL_ERROR functie is mislukt. Het foutbericht dat door de ODBC-functie SQLError wordt geretourneerd, wordt opgeslagen in het m_strError gegevenslid.

  • SQL_INVALID_HANDLE functie is mislukt vanwege een ongeldige omgevingshandgreep, verbindingsgreep of instructiegreep. Dit geeft een programmeerfout aan. Er is geen aanvullende informatie beschikbaar via de ODBC-functie SQLError.

De SQL-voorvoegselcodes worden gedefinieerd door ODBC. De AFX-voorvoegselcodes worden gedefinieerd in AFXDB. H, gevonden in MFC\INCLUDE.

CDBException::m_strError

Bevat een tekenreeks die de fout beschrijft die de uitzondering heeft veroorzaakt.

Opmerkingen

De tekenreeks beschrijft de fout in alfanumerieke termen. Zie voor meer gedetailleerde informatie en een voorbeeld m_strStateNativeOrigin.

CDBException::m_strStateNativeOrigin

Bevat een tekenreeks die de fout beschrijft die de uitzondering heeft veroorzaakt.

Opmerkingen

De tekenreeks is van de notatie "State:%s,Native:%ld,Origin:%s", waarbij de notatiecodes in volgorde worden vervangen door waarden die beschrijven:

  • De SQLSTATE, een tekenreeks met null-beëindiging die een foutcode van vijf tekens bevat die wordt geretourneerd in de parameter szSqlState van de ODBC-functie SQLError. SQLSTATE-waarden worden vermeld in bijlage A, ODBC-foutcodes, in de naslaginformatie voor ODBC-programmeurs. Voorbeeld: 'S0022'.

  • De systeemeigen foutcode, specifiek voor de gegevensbron, die wordt geretourneerd in de parameter pfNativeError van de SQLError functie. Voorbeeld: 207.

  • De tekst van het foutbericht die wordt geretourneerd in de parameter szErrorMsg van de SQLError functie. Dit bericht bestaat uit verschillende namen tussen haakjes. Als er een fout wordt doorgegeven van de bron aan de gebruiker, voegt elk ODBC-onderdeel (gegevensbron, stuurprogramma, Stuurprogrammabeheer) een eigen naam toe. Deze informatie helpt bij het vaststellen van de oorsprong van de fout. Voorbeeld: [Microsoft][ODBC SQL Server-stuurprogramma][SQL Server]

Het framework interpreteert de fouttekenreeks en plaatst de bijbehorende onderdelen in m_strStateNativeOrigin; als m_strStateNativeOrigin deze informatie bevat voor meer dan één fout, worden de fouten gescheiden door nieuwe regels. Het framework plaatst de alfanumerieke fouttekst in m_strError.

Zie de functie SQLError in de naslaginformatie voor ODBC-programmeurs voor meer informatie over de codes die worden gebruikt om deze tekenreeks samen te stellen.

Example

Van ODBC: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server][SQL Server] Ongeldige kolomnaam 'ColName'"

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

In m_strError: "Ongeldige kolomnaam 'ColName'"

Zie ook

CException-klasse
Hiërarchiegrafiek
CDatabase-klasse
CRecordset-klasse
Klasse CFieldExchange
CRecordset::Update
CRecordset::D elete
CException-klasse