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

Применимо к:SQL ServerAzure SQL DatabaseAzure Managed InstanceAzure Synapse Analytics AnalyticsPlatform System (PDW)

Когда приложение вызывает функцию 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, библиотека БАЗЫ данных для C, позволяет приложению устанавливать функции обработки ошибок обратного вызова и обработки сообщений, возвращающие ошибки или сообщения. Некоторые инструкции Transact-SQL, такие как PRINT, RAISERROR, DBCC и SET, возвращают результаты функции обработчика сообщений db-Library вместо результирующий набор. Однако API-интерфейс ODBC не имеет такой возможности обратного вызова. Когда драйвер ODBC собственного клиента SQL Server обнаруживает сообщения, возвращаемые из SQL Server, он задает код возврата ODBC для SQL_SUCCESS_WITH_INFO или SQL_ERROR и возвращает сообщение в виде одной или нескольких диагностических записей. Поэтому приложение ODBC должно тщательно проверить эти коды возврата и вызвать SQLGetDiagRec для получения данных сообщения.

Сведения об ошибках трассировки см. в статье Отслеживание доступа к данным. Сведения об улучшениях трассировки ошибок, добавленных в SQL Server 2012 (11.x), см. в разделе "Доступ к диагностическим сведениям" в журнале расширенных событий.

В этом разделе

См. также

SQL Server Native Client (ODBC)