Udostępnij za pośrednictwem


Klasa CDBException

Reprezentuje warunek wyjątku wynikający z klas baz danych.

Składnia

class CDBException : public CException

Członkowie

Publiczne elementy członkowskie danych

Nazwa/nazwisko opis
CDBException::m_nRetCode Zawiera kod powrotny open database Połączenie ivity (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 Połączenie ivity (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

Cobject

Cexception

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 CDBExceptionbędzie zawierać jedną z następujących wartości:

  • AFX_SQL_ERROR_API_CONFORMANCE Sterownik dla wywołania CDatabase::OpenEx lub CDatabase::Open nie jest zgodny z wymaganym poziomem zgodności interfejsu API ODBC 1 (SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL Połączenie do źródła 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 na GetDefaultConnect 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 lub CByteArray typów danych, zobacz nMaxLength 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łania CRecordset::AddNew metody lub CRecordset::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ę lub Delete 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ę lub Delete, ale po rozpoczęciu operacji nie można już odnaleźć rekordu.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED Próba załadowania biblioteki 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 się to zdarzyć tylko wtedy, gdy biblioteka kursorów ODBC ODBCCURS.DLL nie jest obecna).

  • AFX_SQL_ERROR_SQL_CONFORMANCE Sterownik dla wywołania CDatabase::OpenEx lub CDatabase::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 elemencie m_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 SQLErrorODBC 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 SQLErrorODBC . 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