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
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 CDBException
membre, ce membre contient l’une des valeurs suivantes :
AFX_SQL_ERROR_API_CONFORMANCE Le pilote pour un
CDatabase::OpenEx
ouCDatabase::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 deGetDefaultConnect
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
ouCByteArray
des types de données, consultez l’argumentnMaxLength
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 appelCRecordset::AddNew
ouCRecordset::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
ouDelete
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
ouDelete
, 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
ouCDatabase::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 dem_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
SQLError
ODBC.
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
SQLError
ODBC . 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_strStateNativeOrigin
dans ; 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