Klasa CDBException
Reprezentuje warunek wyjątku wynikający z klas baz danych.
Składnia
class CDBException : public CException
Elementy członkowskie
Publiczne elementy członkowskie danych
Nazwa/nazwisko | opis |
---|---|
CDBException::m_nRetCode | Zawiera kod powrotny open database connectivity (ODBC) typu RETCODE. |
CDBException::m_strError | Zawiera ciąg opisujący błąd w terminach alfanumerycznych. |
CDBException::m_strStateNativeOrigin | Zawiera ciąg opisujący błąd pod względem kodów błędów zwracanych przez ODBC. |
Uwagi
Klasa zawiera dwa publiczne składowe danych, których można użyć, aby określić przyczynę wyjątku lub wyświetlić komunikat tekstowy opisujący wyjątek. CDBException
obiekty są konstruowane i zgłaszane przez funkcje składowe klas baz danych.
Uwaga
Ta klasa jest jedną z klas Open Database Connectivity (ODBC) MFC. Jeśli zamiast tego używasz nowszych klas obiektów dostępu do danych (DAO), zamiast tego użyj CDaoException . Wszystkie nazwy klas DAO mają prefiks "CDao". Aby uzyskać więcej informacji, zobacz artykuł Omówienie: programowanie bazy danych.
Wyjątki to przypadki nieprawidłowego wykonywania z udziałem warunków spoza kontroli programu, takich jak źródło danych lub błędy we/wy sieci. Błędy, które mogą być widoczne w normalnym przebiegu wykonywania programu, zwykle nie są traktowane jako wyjątki.
Dostęp do tych obiektów można uzyskać w zakresie wyrażenia CATCH . Możesz również zgłaszać CDBException
obiekty z własnego kodu za pomocą funkcji globalnej AfxThrowDBException
.
Aby uzyskać więcej informacji na temat ogólnej obsługi wyjątków lub obiektów CDBException
, zobacz artykuły Obsługa wyjątków (MFC) i Wyjątki: wyjątki bazy danych.
Hierarchia dziedziczenia
CDBException
Wymagania
Nagłówek: afxdb.h
CDBException::m_nRetCode
Zawiera kod błędu ODBC typu RETCODE zwracany przez funkcję programowania aplikacji ODBC (API).
Uwagi
Ten typ obejmuje kody prefiksowe SQL zdefiniowane przez odBC i AFX_SQL prefiksowane kody zdefiniowane przez klasy baz danych. W przypadku elementu ten element członkowski CDBException
będzie zawierać jedną z następujących wartości:
AFX_SQL_ERROR_API_CONFORMANCE Sterownik dla wywołania
CDatabase::OpenEx
lubCDatabase::Open
nie jest zgodny z wymaganym poziomem zgodności interfejsu API ODBC 1 (SQL_OAC_LEVEL1).AFX_SQL_ERROR_CONNECT_FAIL Połączenie ze źródłem danych nie powiodło się. Wskaźnik NULL
CDatabase
został przekazany do konstruktora zestawu rekordów, a następnie podjęto próbę utworzenia połączenia naGetDefaultConnect
podstawie błędu.AFX_SQL_ERROR_DATA_TRUNCATED Zażądano większej ilości danych niż podano magazyn. Aby uzyskać informacje na temat zwiększania udostępnionego magazynu danych dla
CString
typów danych lubCByteArray
typów danych, zobacznMaxLength
argument dla RFX_Text i RFX_Binary w obszarze "Makra i globalne".AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Wywołanie żądania
CRecordset::Open
dynasetu nie powiodło się. Zestawy dynaset nie są obsługiwane przez sterownik.AFX_SQL_ERROR_EMPTY_COLUMN_LIST Podjęto próbę otwarcia tabeli (lub podanych elementów nie można zidentyfikować jako wywołania procedury lub instrukcji SELECT ), ale nie ma żadnych kolumn zidentyfikowanych w wywołaniach funkcji wymiany pól rekordów (RFX) w
DoFieldExchange
zastąpieniu.AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH Typ funkcji RFX w
DoFieldExchange
zastąpieniu nie jest zgodny z typem danych kolumny w zestawie rekordów.AFX_SQL_ERROR_ILLEGAL_MODE Wywołaliśmy polecenie
CRecordset::Update
bez wcześniejszego wywołaniaCRecordset::AddNew
metody lubCRecordset::Edit
.AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED Żądanie zablokowania rekordów aktualizacji nie może zostać spełnione, ponieważ sterownik ODBC nie obsługuje blokowania.
AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED Wywołano
CRecordset::Update
tabelę lubDelete
dla tabeli bez unikatowego klucza i zmieniono wiele rekordów.AFX_SQL_ERROR_NO_CURRENT_RECORD Próbowano edytować lub usunąć wcześniej usunięty rekord. Po usunięciu należy przewinąć do nowego bieżącego rekordu.
AFX_SQL_ERROR_NO_POSITIONED_UPDATES Nie można spełnić żądania dynasetu, ponieważ sterownik ODBC nie obsługuje aktualizacji umieszczonych.
AFX_SQL_ERROR_NO_ROWS_AFFECTED Wywołaliśmy
CRecordset::Update
metodę lubDelete
, ale po rozpoczęciu operacji nie można już odnaleźć rekordu.AFX_SQL_ERROR_ODBC_LOAD_FAILED Próba załadowania ODBC.DLL nie powiodła się; System Windows nie może odnaleźć lub nie może załadować tej biblioteki DLL. Ten błąd jest krytyczny.
AFX_SQL_ERROR_ODBC_V2_REQUIRED Nie można spełnić żądania dynasetu, ponieważ wymagany jest sterownik ODBC zgodny z poziomem 2.
AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY Próba przewinięcia nie powiodła się, ponieważ źródło danych nie obsługuje przewijania wstecznego.
AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED Wywołanie żądania
CRecordset::Open
migawki nie powiodło się. Migawki nie są obsługiwane przez sterownik. (Powinno to wystąpić tylko wtedy, gdy biblioteka kursorów ODBC ODBCCURS.DLL nie jest obecna).AFX_SQL_ERROR_SQL_CONFORMANCE Sterownik dla wywołania
CDatabase::OpenEx
lubCDatabase::Open
nie jest zgodny z wymaganym poziomem zgodności SQL ODBC "Minimum" (SQL_OSC_MINIMUM).AFX_SQL_ERROR_SQL_NO_TOTAL Sterownik ODBC nie może określić całkowitego rozmiaru
CLongBinary
wartości danych. Operacja prawdopodobnie nie powiodła się, ponieważ nie można wstępnie przydzielić globalnego bloku pamięci.AFX_SQL_ERROR_RECORDSET_READONLY Podjęto próbę zaktualizowania zestawu rekordów tylko do odczytu lub źródło danych jest tylko do odczytu. Nie można wykonać operacji aktualizacji z zestawem rekordów lub
CDatabase
obiektem, z który jest skojarzony.SQL_ERROR Funkcja nie powiodła się. Komunikat o błędzie zwrócony przez funkcję
SQLError
ODBC jest przechowywany w elemenciem_strError
członkowskim danych.SQL_INVALID_HANDLE Funkcja nie powiodła się z powodu nieprawidłowego dojścia środowiska, dojścia połączenia lub uchwytu instrukcji. Oznacza to błąd programowania. W funkcji
SQLError
ODBC nie są dostępne żadne dodatkowe informacje.
Kody prefiksowane SQL są definiowane przez ODBC. Kody prefiksowe AFX są definiowane w usłudze AFXDB. H, znaleziony w MFC\INCLUDE.
CDBException::m_strError
Zawiera ciąg opisujący błąd, który spowodował wyjątek.
Uwagi
Ciąg opisuje błąd w terminach alfanumerycznych. Aby uzyskać bardziej szczegółowe informacje i przykład, zobacz m_strStateNativeOrigin
.
CDBException::m_strStateNativeOrigin
Zawiera ciąg opisujący błąd, który spowodował wyjątek.
Uwagi
Ciąg ma postać "State:%s,Native:%ld,Origin:%s", gdzie kody formatu w kolejności są zastępowane wartościami, które opisują:
SQLSTATE, ciąg zakończony wartością null zawierający pięcioznakowy kod błędu zwrócony w parametrze szSqlState funkcji
SQLError
ODBC . Wartości SQLSTATE są wymienione w dodatku A, kody błędów ODBC, w dokumentacji programisty ODBC. Przykład: "S0022".Kod błędu natywnego specyficzny dla źródła danych zwrócony w parametrze
SQLError
pfNativeError funkcji. Przykład: 207.Tekst komunikatu o błędzie zwrócony w parametrze
SQLError
szErrorMsg funkcji. Ten komunikat składa się z kilku nazw nawiasów kwadratowych. W miarę przekazywania błędu ze źródła do użytkownika każdy składnik ODBC (źródło danych, sterownik, menedżer sterowników) dołącza własną nazwę. Te informacje ułatwiają wskazanie źródła błędu. Przykład: [Microsoft][STEROWNIK PROGRAMU SQL Server ODBC][SQL Server]
Struktura interpretuje ciąg błędu i umieszcza jego składniki w m_strStateNativeOrigin
; jeśli m_strStateNativeOrigin
zawiera informacje o więcej niż jednym błędzie, błędy są oddzielone przez nowe linie. Struktura umieszcza tekst błędu alfanumerycznego w pliku m_strError
.
Aby uzyskać dodatkowe informacje o kodach używanych do tworzenia tego ciągu, zobacz funkcję SQLError w dokumentacji programisty ODBC.
Przykład
OdBC: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] Nieprawidłowa nazwa kolumny "ColName"
W m_strStateNativeOrigin
: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server][SQL Server]"
W m_strError
: "Nieprawidłowa nazwa kolumny "ColName"
Zobacz też
Klasa CException
Wykres hierarchii
Klasa CDatabase
Klasa CRecordset
Klasa CFieldExchange
CRecordset::Update
CRecordset::D elete
Klasa CException