Дата публикации: 19.04.2010

Изменения в парсере SQL-запросов. Поддержка SQLSTATE и NativeError

Измeнения в парсере SQL запросов (v3)

  • Поддержка терминатора запросов «;»
  • Провайдер генерирует ошибку, если обнаружит несколько SQL-запросов в одном тексте команды
  • Провайдер генерирует ошибку, если обнаружит пустой запрос в тексте команды. Пример: «select * from RDB$DATABASE;/*empty stmt*/;»
  • Добавлена явная поддержка запросов:
    • «GRANT …
    • «REVOKE …»
    • «SET GENERATOR …»
    • «SET STATISTICS …»

Добавлены новые свойства набора рядов (v3)

Поддержка SQLSTATE и NativeError (v3)

  • При обработке ошибок сервера, провайдер создает CustomErrorObject, через который можно получать SQLSTATE (5-ти символьная строка со стандартизированным кодом ошибки) и NativeError (ISC Error Code).
  • Эта функциональность доступна для всех версий FB/IB/YA и не зависит от клиентской библиотеки.
  • За основу алгоритмов и таблиц формирования SQLSTATE взят код из Firebird 2.5 code
  • Провайдер поддерживает новый элемент статус вектора FB2.5 — isc_arg_sqlstate.

При работе через ADODB, SQLSTATE и NativeError доступны через коллекцию ошибок подключения:

  • ADODB.Connection->Errors->Error->SQLState
  • ADODB.Connection->Errors->Error->NativeError

Например:

option explicit

dim cn
set cn = CreateObject("ADODB.Connection")

cn.Provider="LCPI.IBProvider.3"

cn.Properties("location")   = "localhost:d:\database\employee.fdb"
cn.Properties("user id")    ="SYSDBA"
cn.Properties("password")   ="masterkey"
cn.Properties("auto_commit")=true

call cn.Open()

on error resume next

call cn.Execute("DROP TABLE ABRA_KADABRA")

on error goto 0

dim i

for i=0 to cn.Errors.Count-1
 wscript.echo "--- ERROR: "&cstr(i+1)
 wscript.echo "SQLState    : "&cn.Errors.Item(i).SQLSTATE
 wscript.echo "NativeError : "&cn.Errors.Item(i).NativeError
next

Вывод:

--- ERROR: 1
SQLState    : 42S02
NativeError : 336397206 <-- ISC CODE: isc_dsql_table_not_found

Дата публикации: 19.04.2010. Права на материал принадлежат: IBProvider. При перепечатке ссылка на сайт https://www.ibprovider.com/rus обязательна.