Freigeben über


CDBException-Klasse

Stellt eine Ausnahmebedingung dar, die von Datenbankklassen ausgelöst wird.

Syntax

class CDBException : public CException

Member

Öffentliche Datenmember

Name Beschreibung
CDBException::m_nRetCode Enthält einen ODBC-Rückgabecode (Open Database Connectivity) vom Typ RETCODE.
CDBException::m_strError Enthält eine Zeichenfolge, die den Fehler in alphanumerischen Ausdrücken beschreibt.
CDBException::m_strStateNativeOrigin Enthält eine Zeichenfolge, die den Fehler in Bezug auf die von ODBC zurückgegebenen Fehlercodes beschreibt.

Hinweise

Die Klasse enthält zwei öffentliche Datenmember, die Sie verwenden können, um die Ursache der Ausnahme zu bestimmen oder eine Textmeldung anzuzeigen, die die Ausnahme beschreibt. CDBException Objekte werden von Memberfunktionen der Datenbankklassen erstellt und ausgelöst.

Hinweis

Diese Klasse ist eine der ODBC-Klassen (Open Database Connectivity) von MFC. Wenn Sie stattdessen die neueren Dao-Klassen (Data Access Objects) verwenden, verwenden Sie stattdessen CDaoException . Alle DAO-Klassennamen haben "CDao" als Präfix. Weitere Informationen finden Sie im Artikel Übersicht: Datenbankprogrammierung.

Ausnahmen sind Fälle von ungewöhnlicher Ausführung mit Bedingungen außerhalb der Kontrolle des Programms, z. B. Datenquellen- oder Netzwerk-E/A-Fehler. Fehler, die Sie möglicherweise im normalen Verlauf der Ausführung Des Programms erwarten, werden in der Regel nicht als Ausnahmen betrachtet.

Sie können auf diese Objekte innerhalb des Bereichs eines CATCH-Ausdrucks zugreifen. Sie können Objekte auch aus Ihrem eigenen Code mit der AfxThrowDBException globalen Funktion auslösenCDBException.

Weitere Informationen zur Ausnahmebehandlung im Allgemeinen oder zu CDBException Objekten finden Sie in den Artikeln Exception Handling (MFC) und Exceptions: Database Exceptions.

Vererbungshierarchie

CObject

CException

CDBException

Anforderungen

Header: afxdb.h

CDBException::m_nRetCode

Enthält einen ODBC-Fehlercode vom Typ RETCODE, der von einer API-Funktion (ODBC Application Programming Interface) zurückgegeben wird.

Hinweise

Dieser Typ enthält SQL-Präfixcodes, die von ODBC definiert wurden, und AFX_SQL präfixierten Codes, die von den Datenbankklassen definiert werden. Für ein CDBExceptionElement enthält dieses Element einen der folgenden Werte:

  • AFX_SQL_ERROR_API_CONFORMANCE Der Treiber für einen CDatabase::OpenEx Oder CDatabase::Open Aufruf entspricht nicht der erforderlichen ODBC-API-Konformitätsstufe 1 ( SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL Verbindung mit der Datenquelle fehlgeschlagen. Sie haben einen NULL-Zeiger CDatabase an den Recordset-Konstruktor übergeben und anschließend versucht, eine Verbindung basierend auf GetDefaultConnect einem Fehler zu erstellen.

  • AFX_SQL_ERROR_DATA_TRUNCATED Sie haben mehr Daten angefordert, als Sie Speicherplatz zur Verfügung gestellt haben. Informationen zum Erhöhen der bereitgestellten Datenspeicherung für CString oder CByteArray Datentypen finden Sie im nMaxLength Argument für RFX_Text und RFX_Binary unter "Makros und Globalen".

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Ein Aufruf zum CRecordset::Open Anfordern eines Dynasets ist fehlgeschlagen. Dynasets werden vom Treiber nicht unterstützt.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST Sie haben versucht, eine Tabelle zu öffnen (oder was Sie angegeben haben, konnte nicht als Prozeduraufruf oder SELECT-Anweisung identifiziert werden), aber es gibt keine Spalten, die in RFX-Funktionsaufrufen (Record Field Exchange) in Ihrer DoFieldExchange Außerkraftsetzung identifiziert werden.

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH Der Typ einer RFX-Funktion in Ihrer DoFieldExchange Außerkraftsetzung ist nicht mit dem Spaltendatentyp im Recordset kompatibel.

  • AFX_SQL_ERROR_ILLEGAL_MODE Sie ohne CRecordset::Update vorherige Anrufe CRecordset::AddNew oder CRecordset::Edit.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED Ihre Anforderung zum Sperren von Datensätzen für das Update konnte nicht erfüllt werden, da der ODBC-Treiber die Sperrung nicht unterstützt.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED Sie haben eine Tabelle ohne eindeutigen Schlüssel aufgerufen CRecordset::Update oder Delete mehrere Datensätze geändert.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD Sie haben versucht, einen zuvor gelöschten Datensatz zu bearbeiten oder zu löschen. Sie müssen nach einem Löschvorgang zu einem neuen aktuellen Datensatz scrollen.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES Ihre Anforderung für ein Dynaset konnte nicht erfüllt werden, da ihr ODBC-Treiber keine positionierten Updates unterstützt.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED Sie haben sie aufgerufen CRecordset::Update oder Delete, aber wenn der Vorgang begonnen hat, konnte der Datensatz nicht mehr gefunden werden.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED Fehler beim Laden des ODBC.DLL; Windows konnte diese DLL nicht finden oder nicht laden. Dieser Fehler ist schwerwiegend.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED Ihre Anforderung für ein Dynaset konnte nicht erfüllt werden, da ein ODBC-Treiber der Ebene 2 erforderlich ist.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY Ein Versuch, einen Bildlauf auszuführen, ist nicht erfolgreich, da die Datenquelle den Rückwärtslauf nicht unterstützt.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED Ein Aufruf zum CRecordset::Open Anfordern einer Momentaufnahme ist fehlgeschlagen. Momentaufnahmen werden vom Treiber nicht unterstützt. (Dies sollte nur auftreten, wenn die ODBC-Cursorbibliothek nicht vorhanden ODBCCURS.DLL ist.)

  • AFX_SQL_ERROR_SQL_CONFORMANCE Der Treiber für einen CDatabase::OpenEx Aufruf CDatabase::Open entspricht nicht der erforderlichen ODBC SQL-Konformitätsstufe von "Minimum" (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL Der ODBC-Treiber konnte die Gesamtgröße eines CLongBinary Datenwerts nicht angeben. Der Vorgang ist wahrscheinlich fehlgeschlagen, da ein globaler Speicherblock nicht vorverteilt werden konnte.

  • AFX_SQL_ERROR_RECORDSET_READONLY Sie haben versucht, ein schreibgeschütztes Recordset zu aktualisieren, oder die Datenquelle ist schreibgeschützt. Mit dem Recordset oder dem Objekt, dem CDatabase es zugeordnet ist, können keine Aktualisierungsvorgänge ausgeführt werden.

  • fehler bei SQL_ERROR-Funktion. Die von der ODBC-Funktion SQLError zurückgegebene Fehlermeldung wird im m_strError Datenmemm gespeichert.

  • SQL_INVALID_HANDLE Funktion aufgrund eines ungültigen Umgebungshandles, Verbindungshandle oder Anweisungshandle fehlgeschlagen. Dies weist auf einen Programmierfehler hin. Für die ODBC-Funktion SQLErrorsind keine zusätzlichen Informationen verfügbar.

Die SQL-Präfixcodes werden von ODBC definiert. Die AFX-Präfixcodes werden in AFXDB definiert. H, gefunden in MFC\INCLUDE.

CDBException::m_strError

Enthält eine Zeichenfolge, die den Fehler beschreibt, der die Ausnahme verursacht hat.

Hinweise

Die Zeichenfolge beschreibt den Fehler in alphanumerischen Ausdrücken. Ausführlichere Informationen und ein Beispiel finden Sie unter m_strStateNativeOrigin.

CDBException::m_strStateNativeOrigin

Enthält eine Zeichenfolge, die den Fehler beschreibt, der die Ausnahme verursacht hat.

Hinweise

Die Zeichenfolge ist der Form "State:%s,Native:%ld,Origin:%s", wobei die Formatcodes in der Reihenfolge durch Werte ersetzt werden, die Folgendes beschreiben:

  • SqlSTATE, eine mit Null beendete Zeichenfolge, die einen fünfstelligen Fehlercode enthält, der im parameter szSqlState der ODBC-Funktion SQLErrorzurückgegeben wird. SQLSTATE-Werte werden in Anhang A, ODBC-Fehlercodes, in der ODBC-Programmierreferenz aufgeführt. Beispiel: "S0022".

  • Der systemeigene Fehlercode, spezifisch für die Datenquelle, wird im pfNativeError-Parameter der SQLError Funktion zurückgegeben. Beispiel: 207.

  • Der im szErrorMsg-Parameter der SQLError Funktion zurückgegebene Fehlermeldungstext. Diese Nachricht besteht aus mehreren in Klammern klammerten Namen. Da ein Fehler von der Quelle an den Benutzer übergeben wird, fügt jede ODBC-Komponente (Datenquelle, Treiber, Treiber-Manager) einen eigenen Namen an. Diese Informationen helfen, den Ursprung des Fehlers zu bestimmen. Beispiel: [Microsoft][ODBC SQL Server-Treiber][SQL Server]

Das Framework interpretiert die Fehlerzeichenfolge und fügt die zugehörigen Komponenten in m_strStateNativeOrigin; wenn m_strStateNativeOrigin Informationen für mehr als einen Fehler enthalten, werden die Fehler durch Newlines getrennt. Das Framework fügt den alphanumerischen Fehlertext in m_strError.

Weitere Informationen zu den Codes, die für diese Zeichenfolge verwendet werden, finden Sie in der SQLError-Funktion in der ODBC-Programmierreferenz.

Beispiel

Aus ODBC: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server][SQL Server] Ungültiger Spaltenname 'ColName'"

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

In m_strError: "Ungültiger Spaltenname 'ColName'"

Siehe auch

CException-Klasse
Hierarchiediagramm
CDatabase-Klasse
CRecordset-Klasse
CFieldExchange-Klasse
CRecordset::Update
CRecordset::D elete
CException-Klasse