Megosztás a következőn keresztül:


CDBException osztály

Megjegyzés:

A Microsoft Foundation Classes (MFC) könyvtár továbbra is támogatott. A továbbiakban azonban nem adunk hozzá funkciókat, és nem frissítjük a dokumentációt.

Az adatbázisosztályokból eredő kivételfeltételt jelöli.

Szemantika

class CDBException : public CException

Tagok

Nyilvános adatok tagjai

Név Description
CDBException::m_nRetCode Egy RETCODE típusú open database connectivity (ODBC) visszatérési kódot tartalmaz.
CDBException::m_strError A hibát alfanumerikus kifejezésekben leíró sztringet tartalmaz.
CDBException::m_strStateNativeOrigin Az ODBC által visszaadott hibakódokkal kapcsolatos hibát leíró sztringet tartalmaz.

Megjegyzések

Az osztály két nyilvános adattagot tartalmaz, amelyek segítségével meghatározhatja a kivétel okát, vagy megjelenítheti a kivételt leíró szöveges üzenetet. CDBException objektumokat az adatbázisosztályok tagfüggvényei építenek ki és dobnak ki.

Megjegyzés:

Ez az osztály az MFC open database connectivity (ODBC) osztályainak egyike. Ha ehelyett az újabb Adatelérési objektumok (DAO) osztályokat használja, használja helyette a CDaoException parancsot . Minden DAO-osztálynév előtagként "CDao" előtaggal rendelkezik. További információ: Áttekintés: Adatbázis-programozás.

Kivételt képeznek a programon kívüli feltételek, például adatforrás- vagy hálózati I/O-hibák rendellenes végrehajtásának esetei. A program normál végrehajtása során várható hibák általában nem számítanak kivételeknek.

Ezeket az objektumokat a CATCH kifejezés hatókörén belül érheti el. A globális függvénnyel AfxThrowDBException a saját kódjából is kidobhat CDBException objektumokat.

A kivételkezelésről általában vagy az objektumokról CDBException további információt a Kivételkezelés (MFC) és a Kivételek: Adatbáziskivételek című cikkben talál.

Öröklési hierarchia

CObject

CException

CDBException

Requirements

Fejléc: afxdb.h

CDBException::m_nRetCode

Egy ODBC-alkalmazásprogramozási felület (API) függvény által visszaadott RETCODE típusú ODBC-hibakódot tartalmaz.

Megjegyzések

Ez a típus az ODBC által definiált SQL-előtagú kódokat és az adatbázisosztályok által definiált AFX_SQL előtagú kódokat tartalmazza. CDBExceptionEgy tag a következő értékek egyikét fogja tartalmazni:

  • AFX_SQL_ERROR_API_CONFORMANCE A hívás vagy CDatabase::Open hívás CDatabase::OpenEx illesztőprogramja nem felel meg a szükséges ODBC API-megfelelőség 1. szintjének (SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL Az adatforráshoz való kapcsolat nem sikerült. Null CDatabase mutatót adott át a rekordhalmaz konstruktorának, és a következő kísérlet sikertelen volt a kapcsolat létrehozására GetDefaultConnect .

  • AFX_SQL_ERROR_DATA_TRUNCATED Több adatot kért, mint amennyihez tárhelyet biztosított. A megadott adattárolás CStringCByteArray növelésével kapcsolatos információkért tekintse meg a nMaxLengthRFX_Text és RFX_Binary argumentumát a "Makrók és globálisak" területen.

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED A dinasztiát kérő hívás CRecordset::Open sikertelen volt. A dinasztiákat az illesztőprogram nem támogatja.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST Megkísérelt megnyitni egy táblát (vagy azt, amit adott, nem azonosítható eljáráshívásként vagy SELECT utasításként), de a felülbírálásban a rekordmezőcsere (RFX) függvényhívásaiban DoFieldExchange nincsenek azonosított oszlopok.

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH Az RFX-függvény típusa a felülbírálásban DoFieldExchange nem kompatibilis a rekordhalmaz oszlop-adattípusával.

  • AFX_SQL_ERROR_ILLEGAL_MODE Korábban hívás vagy hívás CRecordset::AddNewCRecordset::Editnélkül hívottCRecordset::Update.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED A frissítés rekordjainak zárolására vonatkozó kérés nem teljesíthető, mert az ODBC-illesztő nem támogatja a zárolást.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED Egy egyedi kulccsal nem rendelkező táblát hívott CRecordset::Update meg, Delete és több rekordot is módosított.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD Korábban törölt rekordot próbált szerkeszteni vagy törölni. Törlés után egy új aktuális rekordhoz kell görgetnie.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES A dinasztiára vonatkozó kérés nem teljesíthető, mert az ODBC-illesztő nem támogatja a helyhez tartozó frissítéseket.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED Ön hívott CRecordset::Update vagy Delete, de a művelet megkezdésekor a rekord már nem található.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED A ODBC.DLL betöltése sikertelen volt; A Windows nem találja vagy nem tudta betölteni ezt a DLL-t. Ez a hiba végzetes.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED A dinasztiára vonatkozó kérés nem teljesíthető, mert 2. szintű odBC-illesztőre van szükség.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY A görgetési kísérlet nem sikerült, mert az adatforrás nem támogatja a visszafelé görgetést.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED A pillanatkép kérésére irányuló CRecordset::Open hívás sikertelen volt. Az illesztőprogram nem támogatja a pillanatképeket. (Ez csak akkor fordulhat elő, ha az ODBC kurzortár ODBCCURS.DLL nincs jelen.)

  • AFX_SQL_ERROR_SQL_CONFORMANCE A hívás vagy CDatabase::Open hívás CDatabase::OpenEx illesztőprogramja nem felel meg a minimális ODBC SQL-megfelelőségi szintnek (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL Az ODBC-illesztő nem tudta megadni az adatértékek teljes méretét CLongBinary . A művelet valószínűleg meghiúsult, mert egy globális memóriablokkot nem sikerült előre áthelyezni.

  • AFX_SQL_ERROR_RECORDSET_READONLY Egy írásvédett rekordhalmazt próbált frissíteni, vagy az adatforrás írásvédett. A rekordkészlettel vagy a hozzá társított objektummal nem végezhető frissítési CDatabase művelet.

  • SQL_ERROR függvény nem sikerült. Az ODBC függvény SQLError által visszaadott hibaüzenetet az m_strError adattag tárolja.

  • SQL_INVALID_HANDLE függvény érvénytelen környezeti leíró, kapcsolatkezelő vagy utasításleíró miatt meghiúsult. Ez programozási hibát jelez. Az ODBC függvény SQLErrornem tartalmaz további információt.

Az SQL-előtagú kódokat az ODBC határozza meg. Az AFX-előtagú kódok az AFXDB-ben vannak definiálva. H, az MFC\INCLUDE fájlban található.

CDBException::m_strError

A kivételt okozó hibát leíró sztringet tartalmaz.

Megjegyzések

A sztring alfanumerikus kifejezésekben írja le a hibát. Részletesebb információkért és egy példaért lásd: m_strStateNativeOrigin.

CDBException::m_strStateNativeOrigin

A kivételt okozó hibát leíró sztringet tartalmaz.

Megjegyzések

A sztring "State:%s,Native:%ld,Origin:%s" formátumú, ahol a formátumkódok sorrendben a következő értékeket írják le:

  • Az SQLSTATE, egy null értékű sztring, amely az ODBC függvény SQLErrorszSqlState paraméterében visszaadott öt karakterből álló hibakódot tartalmaz. Az SQLSTATE-értékek az ODBC programozói referencia A függelékében, az ODBC hibakódjaiban jelennek meg. Példa: "S0022".

  • Az adatforrásra jellemző natív hibakód, amely a függvény pfNativeError paraméterében jelenik meg SQLError . Példa: 207.

  • A függvény szErrorMsg paraméterében SQLError visszaadott hibaüzenet szövege. Ez az üzenet több szögletes névből áll. Mivel a rendszer hibát ad át a forrásból a felhasználónak, minden ODBC-összetevő (adatforrás, illesztőprogram, Driver Manager) hozzáfűzi a saját nevét. Ez az információ segít meghatározni a hiba eredetét. Példa: [Microsoft][ODBC SQL Server-illesztőprogram][SQL Server]

A keretrendszer értelmezi a hibasztringet, és az összetevőket belerakja m_strStateNativeOrigin; ha m_strStateNativeOrigin egynél több hibára vonatkozó információt tartalmaz, a hibákat új vonalak választják el egymástól. A keretrendszer az alfanumerikus hibaszöveget a fájlba m_strErrorhelyezi.

A sztring létrehozásához használt kódokkal kapcsolatos további információkért tekintse meg az SQLError függvényt az ODBC Programozó referenciájában.

Example

Forrás: ODBC: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] Érvénytelen oszlopnév "ColName"

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

In m_strError: "Érvénytelen oszlopnév "ColName""

Lásd még

CException osztály
hierarchiadiagram
CDatabase-osztály
CRecordset osztály
CFieldExchange osztály
CRecordset::Update
CRecordset::D elete
CException osztály