Обработка ошибок и сообщений
Когда приложение вызывает функцию 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 для получения данных сообщения.
Сведения об ошибках трассировки см. в статье Отслеживание доступа к данным (на английском языке).
В этом разделе