Gestion des erreurs et des messages
Lorsqu'une application appelle une fonction ODBC, le pilote exécute la fonction et retourne les informations de diagnostic de deux façons : un code de retour indique le succès ou l'échec total d'une fonction ODBC et les enregistrements de diagnostic fournissent des informations détaillées sur la fonction. Les enregistrements de diagnostic comportent un enregistrement d'en-tête et des enregistrements d'état. Au moins un enregistrement de diagnostic, l'enregistrement d'en-tête, est retourné même si la fonction réussit.
Les informations de diagnostic sont utilisées au moment du développement pour intercepter les erreurs de programmation, telles que les handles non valides et les erreurs de syntaxe dans les instructions SQL codées de manière irréversible. Elles sont également utilisées au moment de l'exécution pour intercepter les avertissements et les erreurs d'exécution, tels que la troncation de données, les violations de règle et les erreurs de syntaxe des instructions SQL saisies par l'utilisateur. La logique du programme repose en général sur des codes de retour.
Par exemple, après qu'une application a appelé SQLFetch pour extraire les lignes d'un jeu de résultats, le code de retour indique si la fin du jeu de résultats a été atteinte (SQL_NO_DATA), si des messages d'information ont été retournés (SQL_SUCCESS_WITH_INFO) ou si une erreur s'est produite (SQL_ERROR).
Si le pilote ODBC SQL Server Native Client retourne une valeur autre que SQL_SUCCESS, l'application peut appeler SQLGetDiagRec pour extraire les éventuels messages d'information ou d'erreur. Utilisez SQLGetDiagRec pour faire défiler l'ensemble des messages vers le haut et vers le bas s'il y a plusieurs messages.
Le code de retour SQL_INVALID_HANDLE indique toujours une erreur de programmation et ne doit jamais se rencontrer au moment de l'exécution. Tous les autres codes de retour fournissent des informations d'exécution, bien que SQL_ERROR puisse indiquer une erreur de programmation.
L'API native MicrosoftSQL Server originale, DB-Library for C, permet à une application d'installer les fonctions de rappel de gestion des erreurs et de gestion des messages qui retournent des erreurs ou des messages. Certaines instructions Transact-SQL, telles que PRINT, RAISERROR, DBCC et SET, retournent leurs résultats à la fonction gestionnaire des messages de DB-Library et non dans un jeu de résultats. Toutefois, l'API ODBC n'a aucune fonction de rappel similaire. Lorsque le pilote ODBC SQL Server Native Client détecte des messages provenant de SQL Server, il définit le code de retour ODBC avec la valeur SQL_SUCCESS_WITH_INFO ou SQL_ERROR, puis retourne le message sous forme d'un ou de plusieurs enregistrements de diagnostic. Par conséquent, une application ODBC doit tester avec soin ces codes de retour et appeler SQLGetDiagRec pour récupérer les données du message.
Pour plus d'informations sur le suivi des erreurs, consultez Suivi d'accès aux données. Pour plus d'informations sur les améliorations apportées au suivi d'erreur ajouté dans SQL Server 2012, consultez Accès aux informations de diagnostic dans le journal des événements étendus.