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


Функция SQLGetDiagField

Соответствия
Представлена версия: соответствие стандартам ODBC 3.0: ISO 92

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

Синтаксис


SQLRETURN SQLGetDiagField(  
     SQLSMALLINT     HandleType,  
     SQLHANDLE       Handle,  
     SQLSMALLINT     RecNumber,  
     SQLSMALLINT     DiagIdentifier,  
     SQLPOINTER      DiagInfoPtr,  
     SQLSMALLINT     BufferLength,  
     SQLSMALLINT *   StringLengthPtr);  

Аргументы

HandleType
[Входные данные] Идентификатор типа дескриптора, описывающий тип дескриптора, для которого требуется диагностика. Должна быть одной из следующих:

  • SQL_HANDLE_DBC

  • SQL_HANDLE_DBC_INFO_TOKEN

  • SQL_HANDLE_DESC

  • SQL_HANDLE_ENV

  • SQL_HANDLE_STMT

SQL_HANDLE_DBC_INFO_TOKEN дескриптор используется только диспетчером драйверов и драйвером. Приложения не должны использовать этот тип дескриптора. Дополнительные сведения о SQL_HANDLE_DBC_INFO_TOKEN см. в статье "Разработка осведомленности о пуле подключений" в драйвере ODBC.

Дескриптор
[Входные данные] Дескриптор структуры диагностических данных типа, указанного HandleType. Если HandleType SQL_HANDLE_ENV, дескриптор может быть общим или необработаным дескриптором среды.

RecNumber
[Входные данные] Указывает запись состояния, из которой приложение ищет сведения. Записи состояния нумеруются от 1. Если аргумент DiagIdentifier указывает любое поле заголовка диагностики, RecNumber игнорируется. Если нет, это должно быть более 0.

DiagIdentifier
[Входные данные] Указывает поле диагностики, значение которого должно быть возвращено. Дополнительные сведения см. в разделе "Аргумент DiagIdentifier " в разделе "Комментарии".

DiagInfoPtr
[Выходные данные] Указатель на буфер, в котором возвращаются диагностические сведения. Тип данных зависит от значения DiagIdentifier. Если DiagInfoPtr является целым типом, приложения должны использовать буфер SQLULEN и инициализировать значение до 0 перед вызовом этой функции, так как некоторые драйверы могут записывать только нижний 32-разрядный или 16-разрядный буфер и оставлять бит выше порядка без изменений.

Если DiagInfoPtr имеет значение NULL, StringLengthPtr по-прежнему возвращает общее количество байтов (за исключением символа завершения null для символьных данных), доступное для возврата в буфер, на который указывает DiagInfoPtr.

BufferLength
[Входные данные] Если DiagIdentifier — это определяемый ODBC диагностический объект и DiagInfoPtr указывает на символьную строку или двоичный буфер, этот аргумент должен быть длиной *DiagInfoPtr. Если DiagIdentifier является определяемым ODBC полем, а *DiagInfoPtr является целым числом, bufferLength игнорируется. Если значение в *DiagInfoPtr является строкой Юникода (при вызове SQLGetDiagFieldW), аргумент BufferLength должен быть четным.

Если DiagIdentifier является полем, определяемым драйвером, приложение указывает характер поля диспетчеру драйверов, задав аргумент BufferLength . BufferLength может иметь следующие значения:

  • Если DiagInfoPtr является указателем на символьную строку, BufferLength — это длина строки или SQL_NTS.

  • Если DiagInfoPtr является указателем на двоичный буфер, приложение помещает результат макроса SQL_LEN_BINARY_ATTR(длина) в BufferLength. Это помещает отрицательное значение в BufferLength.

  • Если DiagInfoPtr является указателем на значение, отличное от символьной строки или двоичной строки, BufferLength должно иметь значение SQL_IS_POINTER.

  • Если *DiagInfoPtr содержит тип данных фиксированной длины, BufferLength SQL_IS_INTEGER, SQL_IS_UINTEGER, SQL_IS_SMALLINT или SQL_IS_USMALLINT.

StringLengthPtr
[Выходные данные] Указатель на буфер, в котором возвращается общее число байтов (за исключением количества байтов, необходимых для символа завершения null), доступного для возврата в *DiagInfoPtr для символьных данных. Если число байтов, доступных для возврата, больше или равно BufferLength, текст в *DiagInfoPtr усечен до BufferLength минус длина символа завершения null.

Возвраты

SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE или SQL_NO_DATA.

Диагностика

SQLGetDiagField не публикует диагностические записи для себя. В нем используются следующие возвращаемые значения, чтобы сообщить о результатах собственного выполнения:

  • SQL_SUCCESS: функция успешно вернула диагностические сведения.

  • SQL_SUCCESS_WITH_INFO: *DiagInfoPtr было слишком небольшим, чтобы сохранить запрошенное диагностическое поле. Поэтому данные в поле диагностики усечены. Чтобы определить, что произошло усечение, приложение должно сравнить BufferLength с фактическим числом доступных байтов, которое записывается в *StringLengthPtr.

  • SQL_INVALID_HANDLE: дескриптор, указанный HandleType и Handle, не является допустимым дескриптором .

  • SQL_ERROR: произошло одно из следующих действий:

    • Аргумент DiagIdentifier не был одним из допустимых значений.

    • Аргумент DiagIdentifier был SQL_DIAG_CURSOR_ROW_COUNT, SQL_DIAG_DYNAMIC_FUNCTION, SQL_DIAG_DYNAMIC_FUNCTION_CODE или SQL_DIAG_ROW_COUNT, но Handle не был дескриптором инструкции. (Диспетчер драйверов возвращает эту диагностику.)

    • Аргумент RecNumber был отрицательным или 0, когда DiagIdentifier указал поле из диагностической записи. Значение RecNumber игнорируется для полей заголовка.

    • Запрошенное значение было символьной строкой, а BufferLength было меньше нуля.

    • При использовании асинхронного уведомления асинхронная операция в дескрипторе не завершена.

  • SQL_NO_DATA. Число записей диагностики, которые существовали для дескриптора, указанного в handle, было больше. Функция также возвращает SQL_NO_DATA для любого положительного значения RecNumber, если для Handle нет диагностических записей.

Комментарии

Приложение обычно вызывает SQLGetDiagField для выполнения одной из трех целей:

  1. Получение определенных сведений об ошибке или предупреждении при возврате вызова функции SQL_ERROR или SQL_SUCCESS_WITH_INFO (или SQL_NEED_DATA для функции SQLBrowseConnect ).

  2. Чтобы определить количество строк в источнике данных, затронутых при вставке, удалении или обновлении, выполнялись с вызовом SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos (из поля заголовка SQL_DIAG_ROW_COUNT) или для определения количества строк, существующих в текущем открытом курсоре, если драйвер может предоставить эти сведения (из поля заголовка SQL_DIAG_CURSOR_ROW_COUNT).

  3. Чтобы определить, какая функция была выполнена вызовом SQLExecDirect или SQLExecute (из полей заголовка SQL_DIAG_DYNAMIC_FUNCTION и SQL_DIAG_DYNAMIC_FUNCTION_CODE заголовка).

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

Приложение может сканировать все диагностические записи, добавив recNumber, если SQLGetDiagField возвращает SQL_SUCCESS. Число записей состояния указывается в поле заголовка SQL_DIAG_NUMBER. Вызовы SQLGetDiagField являются недеструктивными для полей заголовка и записи. Приложение может снова вызвать SQLGetDiagField позже, чтобы получить поле из записи, если функция, отличной от диагностических функций, не была вызвана в промежуточном периоде, которая будет публиковать записи в том же дескрипторе.

Приложение может вызывать SQLGetDiagField для возврата любого диагностического поля в любое время, за исключением SQL_DIAG_CURSOR_ROW_COUNT или SQL_DIAG_ROW_COUNT, которое возвращает SQL_ERROR, если Дескриптор не является дескриптором инструкции. Если любое другое поле диагностики не определено, вызов SQLGetDiagField вернет SQL_SUCCESS (если не обнаружена другая диагностика), а для поля возвращается неопределенное значение.

Дополнительные сведения см. в статье Об использовании SQLGetDiagRec и SQLGetDiagField и реализации SQLGetDiagRec и SQLGetDiagField.

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

Аргумент HandleType

Каждый тип дескриптора может иметь диагностические сведения, связанные с ним. Аргумент HandleType указывает тип дескриптора Дескриптора.

Некоторые поля заголовков и записей нельзя возвращать для дескрипторов среды, подключения, инструкции и дескриптора. Эти дескриптора, для которых поле неприменимо, указываются в разделах "Поля заголовка" и "Поля записи" ниже.

Если HandleType SQL_HANDLE_ENV, дескриптор может быть общим или не общим дескриптором среды.

Поля диагностики заголовков для конкретного драйвера не должны быть связаны с дескриптором среды.

Единственными полями заголовка диагностики, определенными для дескриптора, являются SQL_DIAG_NUMBER и SQL_DIAG_RETURNCODE.

Аргумент DiagIdentifier

Этот аргумент указывает идентификатор поля, необходимого для структуры диагностических данных. Если значение RecNumber больше или равно 1, данные в поле описывают диагностические сведения, возвращаемые функцией. Если значение RecNumber равно 0, поле находится в заголовке структуры диагностических данных и поэтому содержит данные, относящиеся к вызову функции, возвращающим диагностические сведения, а не к определенной информации.

Драйверы могут определять поля заголовков и записей для конкретного драйвера в структуре диагностических данных.

Приложение ODBC 3*.x*, работающее с драйвером ODBC 2*.x*, сможет вызывать SQLGetDiagField только с аргументом DiagIdentifier SQL_DIAG_CLASS_ORIGIN, SQL_DIAG_CLASS_SUBCLASS_ORIGIN, SQL_DIAG_CONNECTION_NAME, SQL_DIAG_MESSAGE_TEXT, SQL_DIAG_NATIVE, SQL_DIAG_NUMBER, SQL_DIAG_RETURNCODE, SQL_DIAG_SERVER_NAME или SQL_DIAG_SQLSTATE. Все остальные поля диагностики возвращают SQL_ERROR.

Поля заголовка

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

DiagIdentifier Возвращаемый тип Возвраты
SQL_DIAG_CURSOR_ROW_COUNT SQLLEN Это поле содержит количество строк в курсоре. Его семантика зависит от типов сведений SQLGetInfo SQL_DYNAMIC_CURSOR_ATTRIBUTES2, SQL_FORWARD_ONLY_CURSOR_ATTRIBUTES2, SQL_KEYSET_CURSOR_ATTRIBUTES2 и SQL_STATIC_CURSOR_ATTRIBUTES2, которые указывают, какие числа строк доступны для каждого типа курсора (в SQL_CA2_CRC_EXACT и SQL_CA2_CRC_APPROXIMATE битах).

Содержимое этого поля определяется только для дескрипторов инструкций и только после вызова SQLExecute, SQLExecDirect или SQLMoreResults . Вызов SQLGetDiagField с diagIdentifier SQL_DIAG_CURSOR_ROW_COUNT, отличной от дескриптора инструкций, вернет SQL_ERROR.
SQL_DIAG_DYNAMIC_FUNCTION SQLCHAR * Это строка, описывающая инструкцию SQL, выполняемую базовой функцией. (Дополнительные сведения см. в разделе "Значения полей динамической функции" далее в этом разделе. Содержимое этого поля определяется только для дескрипторов инструкций и только после вызова SQLExecute, SQLExecDirect или SQLMoreResults. Вызов SQLGetDiagField с diagIdentifier SQL_DIAG_DYNAMIC_FUNCTION, отличной от дескриптора инструкции, вернет SQL_ERROR. Значение этого поля не определено перед вызовом SQLExecute или SQLExecDirect.
SQL_DIAG_DYNAMIC_FUNCTION_CODE SQLINTEGER Это числовой код, описывающий инструкцию SQL, которая была выполнена базовой функцией. (Дополнительные сведения см. в разделе "Значения полей динамической функции", далее в этом разделе. Содержимое этого поля определяется только для дескрипторов инструкций и только после вызова SQLExecute, SQLExecDirect или SQLMoreResults. Вызов SQLGetDiagField с diagIdentifier SQL_DIAG_DYNAMIC_FUNCTION_CODE, отличной от дескриптора инструкций, вернет SQL_ERROR. Значение этого поля не определено перед вызовом SQLExecute или SQLExecDirect.
SQL_DIAG_NUMBER SQLINTEGER Количество записей состояния, доступных для указанного дескриптора.
SQL_DIAG_RETURNCODE SQLRETURN Возвращает код, возвращаемый функцией. Список кодов возврата см. в разделе "Коды возврата". Драйверу не нужно реализовать SQL_DIAG_RETURNCODE; он всегда реализуется диспетчером драйверов. Если функция еще не была вызвана в дескрипторе, SQL_SUCCESS будет возвращена для SQL_DIAG_RETURNCODE.
SQL_DIAG_ROW_COUNT SQLLEN Количество строк, затронутых вставкой, удалением или обновлением, выполняемым SQLExecute, SQLExecDirect, SQLBulkOperations или SQLSetPos. Он определяется драйвером после выполнения спецификации курсора. Содержимое этого поля определяется только для дескрипторов инструкций. Вызов SQLGetDiagField с diagIdentifier SQL_DIAG_ROW_COUNT, отличной от дескриптора инструкции, вернет SQL_ERROR. Данные в этом поле также возвращаются в аргументе RowCountPtr SQLRowCount. Данные в этом поле сбрасываются после каждого вызова недиагностичной функции, в то время как количество строк, возвращаемых SQLRowCount , остается неизменным, пока инструкция не будет возвращена в подготовленное или выделенное состояние.

Поля записи

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

DiagIdentifier Возвращаемый тип Возвраты
SQL_DIAG_CLASS_ORIGIN SQLCHAR * Строка, указывающая документ, определяющий часть класса значения SQLSTATE в этой записи. Его значение равно ISO 9075 для всех SQLSTATEs, определенных интерфейсом open Group и ISO call-level. Для SQLSTATEs, зависящих от ODBC (все те, чьи класс SQLSTATE имеет значение "IM"), его значение равно ODBC 3.0.
SQL_DIAG_COLUMN_NUMBER SQLINTEGER Если поле SQL_DIAG_ROW_NUMBER является допустимым номером строки в наборе строк или набором параметров, это поле содержит значение, представляющее номер столбца в результирующем наборе или номер параметра в наборе параметров. Число столбцов результирующих наборов всегда начинается с 1; Если эта запись состояния относится к столбцу закладки, поле может быть равно нулю. Номера параметров начинаются с 1. Он имеет значение SQL_NO_COLUMN_NUMBER, если запись состояния не связана с номером столбца или номером параметра. Если драйвер не может определить номер столбца или номер параметра, с которым связана эта запись, это поле имеет значение SQL_COLUMN_NUMBER_UNKNOWN.

Содержимое этого поля определяется только для дескрипторов инструкций.
SQL_DIAG_CONNECTION_NAME SQLCHAR * Строка, указывающая имя соединения, к которому связана диагностическая запись. Это поле определяется драйвером. Для структур диагностических данных, связанных с дескриптором среды, и для диагностики, не связанной с каким-либо подключением, это поле является строкой нулевой длины.
SQL_DIAG_MESSAGE_TEXT SQLCHAR * Информационное сообщение об ошибке или предупреждении. Это поле отформатировано, как описано в разделе "Диагностические сообщения". Максимальная длина текста диагностического сообщения отсутствует.
SQL_DIAG_NATIVE SQLINTEGER Собственный код ошибки драйвера или источника данных. Если код машинной ошибки отсутствует, драйвер возвращает значение 0.
SQL_DIAG_ROW_NUMBER SQLLEN Это поле содержит номер строки в наборе строк или номер параметра в наборе параметров, с которым связана запись состояния. Номера строк и номера параметров начинаются с 1. Это поле имеет значение SQL_NO_ROW_NUMBER, если эта запись состояния не связана с номером строки или номером параметра. Если драйвер не может определить номер строки или номер параметра, с которым связана эта запись, это поле имеет значение SQL_ROW_NUMBER_UNKNOWN.

Содержимое этого поля определяется только для дескрипторов инструкций.
SQL_DIAG_SERVER_NAME SQLCHAR * Строка, указывающая имя сервера, к которому относится диагностическая запись. Это же значение, возвращаемое для вызова SQLGetInfo с параметром SQL_DATA_SOURCE_NAME. Для структур диагностических данных, связанных с дескриптором среды, и для диагностики, которые не связаны с любым сервером, это поле является строкой нулевой длины.
SQL_DIAG_SQLSTATE SQLCHAR * Пятизначный диагностический код SQLSTATE. Дополнительные сведения см. в разделе SQLSTATEs.
SQL_DIAG_SUBCLASS_ORIGIN SQLCHAR * Строка с тем же форматом и допустимыми значениями, что и SQL_DIAG_CLASS_ORIGIN, идентифицирующая определяющую часть подкласса части кода SQLSTATE. SqlSTATES, для которого возвращается ODBC 3.0, включает в себя следующее:

01S00, 01S01, 01S02, 01S06, 01S07, 07S01, 08S01, 21S01, 21S02, 25S01, 25S02, 25S03, 42S01, 42S02, 42S11, 42S12, 42S21, 42S22, HY095, HY097, HY098, HY099, HY099, HY099, HY100, HY101, HY105, HY107, HY109, HY110, HY111, HYT00, HYT01, IM001, IM002, IM003, IM004, IM005, IM006, IM007, IM008, IM010, IM011, IM012.

Значения полей динамической функции

В следующей таблице описываются значения SQL_DIAG_DYNAMIC_FUNCTION и SQL_DIAG_DYNAMIC_FUNCTION_CODE, которые применяются к каждому типу инструкции SQL, выполняемой вызовом SQLExecute или SQLExecDirect. Драйвер может добавлять к перечисленным драйверу значения.

SQL statement

выполнен
Значение

SQL_DIAG_DYNAMIC_FUNCTION
Значение

SQL_DIAG_DYNAMIC_FUNCTION_CODE
инструкция alter-domain-statement ALTER DOMAIN SQL_DIAG_ALTER_DOMAIN
alter-table-statement ALTER TABLE SQL_DIAG_ALTER_TABLE
определение утверждения CREATEВЕРВЕР SQL_DIAG_CREATE_ASSERTION
определение символьного набора CREATE CHARACTER SET (СОЗДАТЬ СИМВОЛЬНЫЙ НАБОР) SQL_DIAG_CREATE_CHARACTER_SET
Определение параметров сортировки CREATE COLLATION SQL_DIAG_CREATE_COLLATION
domainn-definition "CREATE DOMAIN" SQL_DIAG_CREATE_DOMAIN
инструкция create-index- CREATE INDEX SQL_DIAG_CREATE_INDEX
инструкция create-table-statement CREATE TABLE SQL_DIAG_CREATE_TABLE
Инструкция create-view- CREATE VIEW SQL_DIAG_CREATE_VIEW
спецификация курсора "SELECT CURSOR" SQL_DIAG_SELECT_CURSOR
Delete-statement-positioned "ДИНАМИЧЕСКИЙ УДАЛЕННЫЙ КУРСОР" SQL_DIAG_DYNAMIC_DELETE_CURSOR
Delete-statement-searched "DELETE WHERE" SQL_DIAG_DELETE_WHERE
drop-statement "DROPВЕРВЕР" SQL_DIAG_DROP_ASSERTION
drop-character-set-stmt DROP CHARACTER SET (DROP CHARACTER SET) SQL_DIAG_DROP_CHARACTER_SET
оператор drop-collation-statement "DROP COLLATION" SQL_DIAG_DROP_COLLATION
инструкция drop-domain-statement "DROP DOMAIN" SQL_DIAG_DROP_DOMAIN
оператор drop-index- DROP INDEX SQL_DIAG_DROP_INDEX
drop-schema-statement "DROP SCHEMA" SQL_DIAG_DROP_SCHEMA
drop-table-statement DROP TABLE SQL_DIAG_DROP_TABLE
оператор drop-translation-statement "DROP TRANSLATION" SQL_DIAG_DROP_TRANSLATION
оператор drop-view- "DROP VIEW" SQL_DIAG_DROP_VIEW
Grantstatement "GRANT" SQL_DIAG_GRANT
Инструкция insert- "INSERT" SQL_DIAG_INSERT
ODBC-procedure-extension "CALL" вызов SQL_DIAG_
оператор revoke- "ОТМЕНА" SQL_DIAG_REVOKE
Определение схемы Create SCHEMA (CREATE SCHEMA) SQL_DIAG_CREATE_SCHEMA
определение перевода CREATE TRANSLATION SQL_DIAG_CREATE_TRANSLATION
update-statement-positioned "ДИНАМИЧЕСКИЙ КУРСОР ОБНОВЛЕНИЯ" SQL_DIAG_DYNAMIC_UPDATE_CURSOR
update-statement-searched "UPDATE WHERE" SQL_DIAG_UPDATE_WHERE
Неизвестно пустая строка SQL_DIAG_UNKNOWN_STATEMENT

Последовательность записей состояния

Записи состояния размещаются в последовательности на основе номера строки и типа диагностики. Диспетчер драйверов определяет окончательный порядок возврата записей состояния, создаваемых им. Драйвер определяет окончательный порядок возврата записей состояния, создаваемых им.

Если диагностические записи публикуются диспетчером драйверов и драйвером, диспетчер драйверов отвечает за их заказ.

Если есть две или более записей состояния, последовательность записей определяется первым номером строки. Следующие правила применяются к определению последовательности диагностических записей по строкам:

  • Записи, которые не соответствуют какой-либо строке, отображаются перед записями, соответствующими определенной строке, так как SQL_NO_ROW_NUMBER определен как -1.

  • Записи, для которых номер строки неизвестен перед всеми остальными записями, так как SQL_ROW_NUMBER_UNKNOWN определен как -2.

  • Для всех записей, относящихся к определенным строкам, записи сортируются по значению в поле SQL_DIAG_ROW_NUMBER. Перечислены все ошибки и предупреждения первой строки, а затем все ошибки и предупреждения следующей строки, и т. д.

Заметка

Диспетчер драйверов ODBC 3*.x* не упорядочивает записи состояния в очереди диагностики, если SQLSTATE 01S01 (ошибка в строке) возвращается драйвером ODBC 2*.x* или если SQLSTATE 01S (Ошибка в строке) возвращается драйвером ODBC 3*.x* при вызове SQLExtendedFetch или вызове SQLSetPos на курсоре, расположенном с помощью SQLExtendedFetch.

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

Следующие правила используются для определения первой записи в строке. Запись с самым высоким рангом является первой записью. Источник записи (диспетчер драйверов, драйвер, шлюз и т. д.) не учитывается при ранжировании записей.

  • Записи о состоянии ошибок, описывающие ошибки, имеют самый высокий ранг. К ошибкам сортировки применяются следующие правила:

    • Записи, указывающие на сбой транзакции или возможный сбой транзакции, выделяющие все остальные записи.

    • Если две или более записей описывают одно и то же условие ошибки, то SQLSTATEs, определенные спецификацией Open Group CLI (классы 03–ГЦ), не используют ODBC и определяемые драйвером SQLSTATEs.

  • В соответствии с записями о состоянии значений данных , определяемыми драйвером, нет значений данных (класс 02) имеет второй самый высокий рейтинг.

  • Записи состояния предупреждений, описывающие предупреждения (класс 01), имеют самый низкий ранг. Если две или более записей описывают одно и то же условие предупреждения, то предупреждение SQLSTATEs, определенное спецификацией Open Group CLI, выдается определение ODBC и определяемые драйвером SQLSTATEs.

Сведения Раздел
Получение нескольких полей структуры диагностических данных Функция SQLGetDiagRec

См. также

Справочник по API ODBC
Файлы заголовков ODBC