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
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 CDBException
Element enthält dieses Element einen der folgenden Werte:
AFX_SQL_ERROR_API_CONFORMANCE Der Treiber für einen
CDatabase::OpenEx
OderCDatabase::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 aufGetDefaultConnect
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
oderCByteArray
Datentypen finden Sie imnMaxLength
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 AnrufeCRecordset::AddNew
oderCRecordset::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
oderDelete
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
oderDelete
, 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
AufrufCDatabase::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 imm_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
SQLError
sind 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
SQLError
zurü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