Behandlung von Fehlern und Meldungen

Wenn eine Anwendung eine ODBC-Funktion aufruft, führt der Treiber die Funktion aus und gibt Diagnoseinformationen zurück: Ein Rückgabecode gibt das Ergebnis einer ODBC-Funktion zurück (Erfolg oder Fehlschlagen), und Diagnosedatensätze liefern detaillierte Informationen über die Funktion. Diagnosedatensätze enthalten einen Headerdatensatz und Statusdatensätze. Auch wenn die Funktion erfolgreich ausgeführt wurde, wird zumindest ein Diagnosedatensatz, der Headerdatensatz, zurückgegeben.

Die Diagnoseinformationen dienen während der Entwicklung zur Erfassung von Programmierfehlern wie ungültigen Handles und Syntaxfehlern in hartcodierten SQL-Anweisungen. Darüber hinaus dienen sie zur Laufzeit dazu, Laufzeitfehler und Warnungen zu erfassen, beispielsweise das Abschneiden von Daten, Regelverstöße und Syntaxfehler in benutzerdefinierten SQL-Anweisungen. Die Programmlogik basiert im Allgemeinen auf Rückgabecodes.

Nachdem eine Anwendung beispielsweise SQLFetch aufgerufen hat, um die Zeilen in einem Resultset abzurufen, gibt der Rückgabecode an, ob das Ende des Resultsets erreicht wurde (SQL_NO_DATA), ob Informationsmeldungen zurückgegeben wurden (SQL_SUCCESS_WITH_INFO) und ob ein Fehler aufgetreten ist (SQL_ERROR).

Wenn der SQL Server Native Client ODBC-Treiber etwas anderes als SQL_SUCCESS zurückgibt, kann die Anwendung SQLGetDiagRec aufrufen, um Informations- oder Fehlermeldungen abzurufen. Verwenden Sie SQLGetDiagRec, um im Meldungssatz einen Bildlauf nach oben und unten durchzuführen, wenn es mehr als eine Meldung gibt.

Der Rückgabecode SQL_INVALID_HANDLE gibt immer einen Programmierfehler an und sollte zur Laufzeit nie auftreten. Alle anderen Rückgabecodes stellen Laufzeitinformationen bereit, wenngleich SQL_ERROR einen Programmierfehler angeben kann.

Die ursprüngliche systemeigene API für MicrosoftSQL Server, DB-Library für C, ermöglicht es einer Anwendung, Rückruffunktionen für die Fehler- und Meldungsbehandlung zu installieren, die Fehler oder Meldungen zurückgeben. Einige Transact-SQL-Anweisungen, wie PRINT, RAISERROR, DBCC und SET, geben ihre Ergebnisse an die Meldungshandlerfunktion der DB-Library anstatt an ein Resultset zurück. Jedoch verfügt die ODBC-API über keine solche Rückruffähigkeit. Wenn der SQL Server Native Client ODBC-Treiber Meldungen erkennt, die von SQL Server zurückkommen, legt er den ODBC-Rückgabecode auf SQL_SUCCESS_WITH_INFO oder SQL_ERROR fest und gibt die Meldung als einen oder mehrere Diagnosedatensätze zurück. Daher muss eine ODBC-Anwendung sorgfältig auf diese Rückgabecodes prüfen und SQLGetDiagRec aufrufen, um Meldungsdaten abzurufen.

Informationen zum Verfolgen von Fehlern finden Sie unter Data Access Tracing (möglicherweise in englischer Sprache).