Обработка ошибок и сообщений
Когда приложение вызывает функцию ODBC, драйвер выполняет функцию и возвращает диагностические сведения двумя способами: код возврата указывает на общий успех или сбой функции ODBC, а диагностические записи предоставляют подробные сведения о функции. Диагностическая запись состоит из записи заголовка и записи состояния. При успешном выполнении функции возвращается как минимум одна диагностическая запись, запись заголовка.
Диагностические сведения используются во время разработки для перехвата программных ошибок, например недопустимых дескрипторов и синтаксических ошибок в жестко запрограммированных инструкциях SQL. Она также используется во время выполнения для захвата ошибок и предупреждений времени выполнения, например усечения данных, нарушения правил и синтаксических ошибок в инструкциях SQL, введенных пользователем. Программная логика обычно основана на кодах возврата.
Например, после того, как приложение вызывает SQLFetch для получения строк в результирующем наборе, код возврата указывает, был ли достигнут конец результирующий набор (SQL_NO_DATA), были ли возвращены какие-либо информационные сообщения (SQL_SUCCESS_WITH_INFO) или произошла ли ошибка (SQL_ERROR).
Если драйвер ODBC SQL Server Native Client возвращает что-либо, кроме 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 Native Client обнаруживает сообщения, возвращаемые из SQL Server, он устанавливает код возврата ODBC на SQL_SUCCESS_WITH_INFO или SQL_ERROR и возвращает сообщение в виде одной или нескольких диагностических записей. Поэтому приложение ODBC должно тщательно проверить наличие этих кодов возврата и вызвать SQLGetDiagRec для получения данных сообщения.
Сведения об ошибках трассировки см. в статье Отслеживание доступа к данным. Сведения об улучшениях трассировки ошибок, добавленных в SQL Server 2012 г., см. в разделе Доступ к диагностическим сведениям в журнале расширенных событий.