Поделиться через


Обработка ошибок и сообщений

Когда приложение вызывает функцию ODBC, драйвер выполняет эту функцию и возвращает диагностические сведения двумя следующими способами. Код возврата указывает на общий успех или ошибку функции ODBC, а диагностические записи предоставляют подробные сведения о функции. Диагностическая запись состоит из записи заголовка и записи состояния. При успешном выполнении функции возвращается как минимум одна диагностическая запись, запись заголовка.

Диагностические сведения используются во время разработки для перехвата программных ошибок, например недопустимых дескрипторов и синтаксических ошибок в жестко запрограммированных инструкциях SQL. Она также используется во время выполнения для захвата ошибок и предупреждений времени выполнения, например усечения данных, нарушения правил и синтаксических ошибок в инструкциях SQL, введенных пользователем. Программная логика обычно основана на кодах возврата.

Например, после того как приложение вызывает функцию SQLFetch для получения строк в результирующем наборе, код возврата указывает, был ли достигнут конец результирующего набора (SQL_NO_DATA), возвращается ли какое-либо информационное сообщение (SQL_SUCCESS_WITH_INFO) или произошла ошибка (SQL_ERROR).

Если драйвер ODBC для собственного клиента SQL Server возвращает что-то, кроме SQL_SUCCESS, приложение может вызвать функцию SQLGetDiagRec для получения сведений или сообщений об ошибке. SQLGetDiagRec используется для прокрутки набора сообщений, если их несколько.

Код возврата SQL_INVALID_HANDLE всегда указывает на программную ошибку, поэтому не должен встречаться во время выполнения. Все другие коды возврата предоставляют сведения времени выполнения, хотя SQL_ERROR может означать программную ошибку.

Исходный собственный API Microsoft SQL Server, DB-Library для C, позволяет приложению устанавливать обработку ошибок по ответному вызову и функции обработки сообщений, возвращающие ошибки или сообщения. Некоторые инструкции Transact-SQL, например PRINT, RAISERROR, DBCC и SET, возвращают свои результаты функции обработки сообщений DB-Library, а не результирующему набору. Однако API-интерфейс ODBC не имеет такой возможности ответного вызова. Если драйвер ODBC для собственного клиента SQL Server обнаруживает сообщения, приходящие обратно из SQL Server, он присваивает коду возврата значение SQL_SUCCESS_WITH_INFO или SQL_ERROR и возвращает сообщение в виде одной или нескольких диагностических записей. Поэтому приложение ODBC должно внимательно проверять наличие этих кодов возврата и вызывать SQLGetDiagRec для получения данных сообщения.

Сведения об ошибках трассировки см. в статье Отслеживание доступа к данным (на английском языке).

См. также

Основные понятия