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


Пример диагностики шлюзов

В архитектуре шлюза драйвер отправляет запросы в шлюз, поддерживающий ODBC. Шлюз отправляет запросы в СУБД. Так как это компонент, который взаимодействует с диспетчером драйверов, драйвер форматирует и возвращает аргументы для SQLGetDiagRec.

Например, если Oracle основан на шлюзе rdb в Microsoft Open Data Services и если RDB не удалось найти таблицу EMPLOYEE, шлюз может создать это диагностическое сообщение:

"[42S02][-1][DEC][ODS Gateway][Rdb]%SQL-F-RELNOTDEF, Table EMPLOYEE is not defined "  
   "in schema."  

Так как ошибка произошла в источнике данных, шлюз добавил префикс для идентификатора источника данных ([Rdb]) в диагностическое сообщение. Так как шлюз был компонентом, интерфейсируемым с источником данных, он добавил префиксы для своего поставщика ([DEC]) и идентификатор ([шлюз ODS]) в диагностическое сообщение. Он также добавил значение SQLSTATE и код ошибки Rdb в начало диагностического сообщения. Это позволило сохранить семантику собственной структуры сообщений и по-прежнему предоставить диагностические сведения ODBC драйверу. Драйвер анализирует сведения об ошибке, подключенные к инструкции ошибки шлюзом.

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

SQLSTATE:         "42S02"  
Native Error:      -1  
Diagnostic Msg:   "[DEC][ODS Gateway][Rdb]%SQL-F-RELNOTDEF, Table EMPLOYEE is not "  
                  "defined in schema."