Classe CDBException

Rappresenta una condizione di eccezione generata da classi di database.

Sintassi

class CDBException : public CException

Membri

Membri dati pubblici

Nome Descrizione
CDBException::m_nRetCode Contiene un codice restituito ODBC (Open Database Connectivity), di tipo RETCODE.
CDBException::m_strError Contiene una stringa che descrive l'errore in termini alfanumerici.
CDBException::m_strStateNativeOrigin Contiene una stringa che descrive l'errore in termini di codici di errore restituiti da ODBC.

Osservazioni:

La classe include due membri dati pubblici che è possibile usare per determinare la causa dell'eccezione o per visualizzare un messaggio di testo che descrive l'eccezione. CDBException gli oggetti vengono costruiti e generati da funzioni membro delle classi di database.

Nota

Questa classe è una delle classi ODBC (Open Database Connectivity) di MFC. Se invece si usano le classi DAO (Data Access Objects) più recenti, usare invece CDaoException . Tutti i nomi delle classi DAO hanno "CDao" come prefisso. Per altre informazioni, vedere l'articolo Panoramica: Programmazione del database.

Le eccezioni sono casi di esecuzione anomala che coinvolgono condizioni esterne al controllo del programma, ad esempio errori di I/O di rete o origine dati. Gli errori che potrebbero essere visualizzati nel normale corso dell'esecuzione del programma non sono in genere considerate eccezioni.

È possibile accedere a questi oggetti all'interno dell'ambito di un'espressione CATCH . È anche possibile generare CDBException oggetti dal proprio codice con la AfxThrowDBException funzione globale.

Per altre informazioni sulla gestione delle eccezioni in generale o sugli CDBException oggetti, vedere gli articoli Gestione delle eccezioni (MFC) ed Eccezioni: Eccezioni del database.

Gerarchia di ereditarietà

CObject

CException

CDBException

Requisiti

Intestazione: afxdb.h

CDBException::m_nRetCode

Contiene un codice di errore ODBC di tipo RETCODE restituito da una funzione API (Application Programming Interface) ODBC.

Osservazioni:

Questo tipo include codici con prefisso SQL definiti da ODBC e codici con prefisso AFX_SQL definiti dalle classi di database. Per un CDBExceptionmembro , questo membro conterrà uno dei valori seguenti:

  • AFX_SQL_ERROR_API_CONFORMANCE Il driver per una CDatabase::OpenEx chiamata o CDatabase::Open non è conforme al livello di conformità dell'API ODBC 1 ( SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL Connessione all'origine dati non riuscita. È stato passato un puntatore NULL CDatabase al costruttore del recordset e il tentativo successivo di creare una connessione in base all'errore GetDefaultConnect .

  • AFX_SQL_ERROR_DATA_TRUNCATED Sono stati richiesti più dati rispetto all'archiviazione fornita. Per informazioni sull'aumento dell'archiviazione dei dati fornita per CString i tipi di dati o CByteArray , vedere l'argomento nMaxLength per RFX_Text e RFX_Binary in "Macro e globali".

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Una chiamata alla CRecordset::Open richiesta di un dynaset non riuscita. I dynaset non sono supportati dal driver.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST Si è tentato di aprire una tabella (o quello fornito non è stato possibile identificare come una chiamata di routine o un'istruzione SELECT ), ma non sono presenti colonne identificate nelle chiamate di funzione RFX (Record Field Exchange) nell'override DoFieldExchange .

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH Il tipo di una funzione RFX nell'override DoFieldExchange non è compatibile con il tipo di dati della colonna nel recordset.

  • AFX_SQL_ERROR_ILLEGAL_MODE È stato chiamato CRecordset::Update senza chiamare CRecordset::AddNew in precedenza o CRecordset::Edit.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED Impossibile soddisfare la richiesta di blocco dei record per l'aggiornamento perché il driver ODBC non supporta il blocco.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED È stato chiamato CRecordset::Update o Delete per una tabella senza chiave univoca e sono stati modificati più record.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD Si è tentato di modificare o eliminare un record eliminato in precedenza. È necessario scorrere fino a un nuovo record corrente dopo un'eliminazione.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES Impossibile soddisfare la richiesta di un dynaset perché il driver ODBC non supporta gli aggiornamenti posizionati.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED È stato chiamato CRecordset::Update o Delete, ma quando l'operazione ha iniziato il record non è più stato trovato.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED Tentativo di caricamento del ODBC.DLL non riuscito; Windows non è riuscito a trovare o non è stato possibile caricare la DLL. Questo errore è irreversibile.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED Impossibile soddisfare la richiesta di un dynaset perché è necessario un driver ODBC conforme al livello 2.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY Un tentativo di scorrimento non è riuscito perché l'origine dati non supporta lo scorrimento indietro.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED Una chiamata alla CRecordset::Open richiesta di uno snapshot non riuscita. Gli snapshot non sono supportati dal driver. Questa operazione deve verificarsi solo quando la libreria di cursori ODBC ODBCCURS.DLL non è presente.

  • AFX_SQL_ERROR_SQL_CONFORMANCE Il driver per una CDatabase::OpenEx chiamata o CDatabase::Open non è conforme al livello di conformità SQL ODBC richiesto di "Minimum" (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL Il driver ODBC non è riuscito a specificare le dimensioni totali di un CLongBinary valore di dati. L'operazione probabilmente non è riuscita perché non è stato possibile preallocare un blocco di memoria globale.

  • AFX_SQL_ERROR_RECORDSET_READONLY Si è tentato di aggiornare un recordset di sola lettura oppure l'origine dati è di sola lettura. Non è possibile eseguire operazioni di aggiornamento con il recordset o l'oggetto CDatabase a cui è associato.

  • SQL_ERROR Funzione non riuscita. Il messaggio di errore restituito dalla funzione SQLError ODBC viene archiviato nel m_strError membro dati.

  • SQL_INVALID_HANDLE Funzione non è riuscita a causa di un handle di ambiente, un handle di connessione o un handle di istruzione non valido. Ciò indica un errore di programmazione. Non sono disponibili informazioni aggiuntive dalla funzione SQLErrorODBC.

I codici con prefisso SQL sono definiti da ODBC. I codici con prefisso AFX sono definiti in AFXDB. H, trovato in MFC\INCLUDE.

CDBException::m_strError

Contiene una stringa che descrive l'errore che ha causato l'eccezione.

Osservazioni:

La stringa descrive l'errore in termini alfanumerici. Per informazioni più dettagliate e un esempio, vedere m_strStateNativeOrigin.

CDBException::m_strStateNativeOrigin

Contiene una stringa che descrive l'errore che ha causato l'eccezione.

Osservazioni:

La stringa è nel formato "State:%s,Native:%ld,Origin:%s", dove i codici di formato, in ordine, vengono sostituiti da valori che descrivono:

  • SQLSTATE, stringa con terminazione Null contenente un codice di errore di cinque caratteri restituito nel parametro szSqlState della funzione SQLErrorODBC . I valori di SQLSTATE sono elencati nell'Appendice A, codici di errore ODBC, nella guida di riferimento per programmatori ODBC. Esempio: "S0022".

  • Codice di errore nativo, specifico per l'origine dati, restituito nel parametro pfNativeError della SQLError funzione. Esempio: 207.

  • Testo del messaggio di errore restituito nel parametro szErrorMsg della SQLError funzione. Questo messaggio è costituito da diversi nomi tra parentesi quadre. Quando un errore viene passato dall'origine all'utente, ogni componente ODBC (origine dati, driver, Gestione driver) aggiunge il proprio nome. Queste informazioni consentono di individuare l'origine dell'errore. Esempio: [Microsoft][ODBC SQL Server Driver][SQL Server]

Il framework interpreta la stringa di errore e inserisce i relativi componenti in m_strStateNativeOrigin. Se m_strStateNativeOrigin contiene informazioni per più errori, gli errori vengono separati da nuove righe. Il framework inserisce il testo dell'errore alfanumerico in m_strError.

Per altre informazioni sui codici usati per creare questa stringa, vedere la funzione SQLError nella guida di riferimento per programmatori ODBC.

Esempio

Da ODBC: "State:S0022,Native:207,Origin:[Microsoft][ODBC SQL Server Driver][SQL Server] Nome colonna 'ColName'" non valido

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

In m_strError: "Nome colonna non valido 'ColName'"

Vedi anche

Classe CException
Grafico della gerarchia
Classe CDatabase
Classe CRecordset
Classe CFieldExchange
CRecordset::Update
CRecordset::D elete
Classe CException