CDBException, classe

Représente une condition d'exception résultant des classes de base de données.

Syntaxe

class CDBException : public CException

Membres

Membres de données publics

Nom Description
CDBException ::m_nRetCode Contient un code de retour ODBC (Open Database Connectivity), de type RETCODE.
CDBException ::m_strError Contient une chaîne qui décrit l’erreur en termes alphanumériques.
CDBException ::m_strStateNativeOrigin Contient une chaîne décrivant l’erreur en termes de codes d’erreur retournés par ODBC.

Notes

La classe inclut deux membres de données publiques que vous pouvez utiliser pour déterminer la cause de l’exception ou pour afficher un message texte décrivant l’exception. CDBException les objets sont construits et levées par les fonctions membres des classes de base de données.

Remarque

Cette classe est l’une des classes ODBC (Open Database Connectivity) de MFC. Si vous utilisez plutôt les classes DAO (Data Access Objects) plus récentes, utilisez CDaoException à la place. Tous les noms de classes DAO ont « CDao » comme préfixe. Pour plus d’informations, consultez l’article Vue d’ensemble : Programmation de base de données.

Les exceptions sont des cas d’exécution anormale impliquant des conditions extérieures au contrôle du programme, telles que des erreurs d’E/S réseau ou de source de données. Les erreurs que vous pouvez vous attendre à voir dans le cours normal de l’exécution de votre programme ne sont généralement pas considérées comme des exceptions.

Vous pouvez accéder à ces objets dans l’étendue d’une expression CATCH . Vous pouvez également lever CDBException des objets à partir de votre propre code avec la AfxThrowDBException fonction globale.

Pour plus d’informations sur la gestion des exceptions en général ou sur CDBException les objets, consultez les articles MFC (Exception Handling) et Exceptions : Exceptions de base de données.

Hiérarchie d'héritage

CObject

CException

CDBException

Spécifications

En-tête : afxdb.h

CDBException ::m_nRetCode

Contient un code d’erreur ODBC de type RETCODE retourné par une fonction API (Application Programming Interface) ODBC.

Notes

Ce type inclut des codes préfixés SQL définis par ODBC et des codes AFX_SQL préfixés définis par les classes de base de données. Pour un CDBExceptionmembre, ce membre contient l’une des valeurs suivantes :

  • AFX_SQL_ERROR_API_CONFORMANCE Le pilote pour un CDatabase::OpenEx ou CDatabase::Open appel n’est pas conforme au niveau de conformité de l’API ODBC requis 1 (SQL_OAC_LEVEL1).

  • AFX_SQL_ERROR_CONNECT_FAIL Échec de la connexion à la source de données. Vous avez passé un pointeur NULL CDatabase au constructeur de votre jeu d’enregistrements et la tentative suivante de créer une connexion en fonction de GetDefaultConnect l’échec.

  • AFX_SQL_ERROR_DATA_TRUNCATED Vous avez demandé plus de données que vous n’avez fourni de stockage. Pour plus d’informations sur l’augmentation du stockage de données fourni pour CString ou CByteArray des types de données, consultez l’argument nMaxLength de RFX_Text et de RFX_Binary sous « Macros et globals ».

  • AFX_SQL_ERROR_DYNASET_NOT_SUPPORTED Un appel à CRecordset::Open la demande d’une feuille de réponse dynamique a échoué. Les dynasets ne sont pas pris en charge par le pilote.

  • AFX_SQL_ERROR_EMPTY_COLUMN_LIST Vous avez tenté d’ouvrir une table (ou ce que vous avez donné n’a pas pu être identifié en tant qu’appel de procédure ou instruction SELECT ), mais aucune colonne n’est identifiée dans les appels de fonction RFX (Record Field Exchange) dans votre DoFieldExchange remplacement.

  • AFX_SQL_ERROR_FIELD_SCHEMA_MISMATCH Le type d’une fonction RFX dans votre DoFieldExchange remplacement n’est pas compatible avec le type de données de colonne dans le jeu d’enregistrements.

  • AFX_SQL_ERROR_ILLEGAL_MODE Vous avez appelé CRecordset::Update sans appel CRecordset::AddNew ou CRecordset::Edit.

  • AFX_SQL_ERROR_LOCK_MODE_NOT_SUPPORTED votre demande de verrouillage des enregistrements pour la mise à jour n’a pas pu être remplie, car votre pilote ODBC ne prend pas en charge le verrouillage.

  • AFX_SQL_ERROR_MULTIPLE_ROWS_AFFECTED Vous avez appelé CRecordset::Update ou Delete pour une table sans clé unique et modifié plusieurs enregistrements.

  • AFX_SQL_ERROR_NO_CURRENT_RECORD Vous avez tenté de modifier ou de supprimer un enregistrement précédemment supprimé. Vous devez faire défiler jusqu’à un nouvel enregistrement actif après une suppression.

  • AFX_SQL_ERROR_NO_POSITIONED_UPDATES Votre demande de feuille de réponse dynamique n’a pas pu être remplie, car votre pilote ODBC ne prend pas en charge les mises à jour positionnées.

  • AFX_SQL_ERROR_NO_ROWS_AFFECTED Vous avez appelé CRecordset::Update ou Delete, mais lorsque l’opération a commencé l’enregistrement n’a plus pu être trouvé.

  • AFX_SQL_ERROR_ODBC_LOAD_FAILED Une tentative de chargement du ODBC.DLL a échoué ; Windows n’a pas pu trouver ou ne peut pas charger cette DLL. Cette erreur est irrécupérable.

  • AFX_SQL_ERROR_ODBC_V2_REQUIRED Votre demande de feuille de réponse dynamique n’a pas pu être remplie, car un pilote ODBC de niveau 2 est requis.

  • AFX_SQL_ERROR_RECORDSET_FORWARD_ONLY Une tentative de défilement n’a pas réussi, car la source de données ne prend pas en charge le défilement vers l’arrière.

  • AFX_SQL_ERROR_SNAPSHOT_NOT_SUPPORTED Un appel à CRecordset::Open la demande d’un instantané a échoué. Les instantanés ne sont pas pris en charge par le pilote. (Cela doit se produire uniquement lorsque la bibliothèque de curseurs ODBC ODBCCURS.DLL n’est pas présente.)

  • AFX_SQL_ERROR_SQL_CONFORMANCE Le pilote pour un CDatabase::OpenEx ou CDatabase::Open appel n’est pas conforme au niveau de conformité ODBC SQL requis de « Minimum » (SQL_OSC_MINIMUM).

  • AFX_SQL_ERROR_SQL_NO_TOTAL Le pilote ODBC n’a pas pu spécifier la taille totale d’une CLongBinary valeur de données. L’opération a probablement échoué, car un bloc de mémoire global n’a pas pu être prélocalisé.

  • AFX_SQL_ERROR_RECORDSET_READONLY Vous avez tenté de mettre à jour un jeu d’enregistrements en lecture seule ou la source de données est en lecture seule. Aucune opération de mise à jour ne peut être effectuée avec le jeu d’enregistrements ou l’objet CDatabase auquel il est associé.

  • échec de la fonction SQL_ERROR. Le message d’erreur retourné par la fonction SQLError ODBC est stocké dans le membre de m_strError données.

  • SQL_INVALID_HANDLE fonction a échoué en raison d’un handle d’environnement non valide, d’un handle de connexion ou d’un handle d’instruction. Cela indique une erreur de programmation. Aucune information supplémentaire n’est disponible à partir de la fonction SQLErrorODBC.

Les codes préfixés SQL sont définis par ODBC. Les codes préfixés AFX sont définis dans AFXDB. H, trouvé dans MFC\INCLUDE.

CDBException ::m_strError

Contient une chaîne décrivant l’erreur qui a provoqué l’exception.

Notes

La chaîne décrit l’erreur en termes alphanumériques. Pour plus d’informations et un exemple, consultez m_strStateNativeOrigin.

CDBException ::m_strStateNativeOrigin

Contient une chaîne décrivant l’erreur qui a provoqué l’exception.

Notes

La chaîne se présente sous la forme « State :%s, Native :%ld,Origin :%s », où les codes de format, dans l’ordre, sont remplacés par des valeurs qui décrivent :

  • SQLSTATE, chaîne terminée par null contenant un code d’erreur à cinq caractères retourné dans le paramètre szSqlState de la fonction SQLErrorODBC . Les valeurs SQLSTATE sont répertoriées dans l’annexe A, les codes d’erreur ODBC, dans la référence du programmeur ODBC. Exemple : « S0022 ».

  • Code d’erreur natif, spécifique à la source de données, retourné dans le paramètre pfNativeError de la SQLError fonction. Exemple : 207.

  • Texte du message d’erreur retourné dans le paramètre szErrorMsg de la SQLError fonction. Ce message se compose de plusieurs noms entre crochets. Comme une erreur est passée de sa source à l’utilisateur, chaque composant ODBC (source de données, pilote, Gestionnaire de pilotes) ajoute son propre nom. Ces informations permettent d’identifier l’origine de l’erreur. Exemple : [Microsoft][ODBC SQL Server Driver][SQL Server]

L’infrastructure interprète la chaîne d’erreur et place ses composants m_strStateNativeOrigindans ; si m_strStateNativeOrigin elle contient des informations pour plusieurs erreurs, les erreurs sont séparées par des lignes de nouvelle ligne. L’infrastructure place le texte d’erreur alphanumérique dans m_strError.

Pour plus d’informations sur les codes utilisés pour créer cette chaîne, consultez la fonction SQLError dans la référence du programmeur ODBC.

Exemple

À partir d’ODBC : « State :S0022,Native :207,Origin :[Microsoft][ODBC SQL Server Driver][SQL Server] Nom de colonne non valide « ColName »

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

In m_strError: « Nom de colonne non valide 'ColName' »

Voir aussi

CException, classe
Graphique hiérarchique
CDatabase, classe
CRecordset, classe
CFieldExchange, classe
CRecordset ::Update
CRecordset ::D elete
CException, classe