Навигация:  Traffic Inspector SDK > API администрирования > Интерфейсы > ITrafInspAdmin >

DBQuery, DBQuery2

Previous pageReturn to chapter overviewNext page

 

Выполнение SQL запроса к базам данных.

 

C/C++ -

 

HRESULT _stdcall DBQuery([in] enum APIDBType DBType, [in] BSTR Request, [in, defaultvalue(0)] long ThreadPrior, [out, retval] BSTR* Value);

 

HRESULT _stdcall DBQuery2([in] enum APIDBType DBType, [in] BSTR Request, [in] long Limit, [in] long Offset, [in] long ThreadPrior, [out] VARIANT_BOOL* Cancel, [out] VARIANT_BOOL* Timeout, [out] long* Rows, [out, retval] BSTR* Value);

 

Delphi -

 

function DBQuery(DBType: APIDBType; const Request: WideString; ThreadPrior: Integer): WideString; safecall;

 

function DBQuery2(DBType: APIDBType; const Request: WideString; Limit: Integer;

                      Offset: Integer; ThreadPrior: Integer; out Cancel: WordBool;

                      out Timeout: WordBool; out Rows: Integer): WideString; safecall;

 

Возвращаемое значение - Результат выполнения запроса ввиде XML данных. Данные выдаются ввиде текста.

 

DBType - задается база данных:

 

APIDBType_Main = 0. Локальная база данных, тип SQLite. Файл main.db3. Содержит текущие данные биллинга и внешних счетчиков.
APIDBType_ProxyCache = 1. Индекс кеша прокси сервера, тип SQLite. Файл proxy.db3.
APIDBType_Log = 2. Локальная база данных журналов, тип SQLite. Файл log.db3. Содержит всю историю работы различных служб программы.
APIDBType_Ext = 3. Внешняя база данных, тип Microsoft SQL server. Обращение возможно, если работа с внешней базой данных была настроена.
APIDBType_Profile = 4. Локальная база данных профилей, тип SQLite. Файл profile.db3.

 

Request - SQL запрос. Допускается задавать комбинированный запрос из нескольких SQL конструкций. Для SQLite запросы отделяются ";", для MSSQL ключевым словом GO. Но результат будет выведен только один.

 

Каждая колонка выводимых данных представляет собой элемент с именем Row, каждая ячейка таблицы - атрибут. Имя атрибута берется из имени колонки таблицы запроса.

ThreadPrior - Изменение приоритета потока. Допустимое значение  - целое от -2 до 2. Если 0, то приоритет меняться не будет. Понижение приоритета может быть полезно при выполнении длительных по времени запросов для того, что-бы не нарушать нормальную работу других служб программы.

 

DBQuery2 - расширенная версия функции DBQuery. В DBQuery при таймауте или прерывании запроса выдается исключение, а в DBQuery2 выставляются признаки Cancel и Timeout. Это позволяет отдельно произвести обработку этих результатов.

 

Для DBQuery2 также имеется возможность задавать сокращенную выборку -

 

Limit - максимальное количество строк возвращаемых данных.

Offset - выводить, начиная с заданной строки. Нумерация с "0".

Rows - возвращается общее количество строк всего запроса. Этот параметр, например, может использоваться при выполнении постраничного вывода для определения количества страниц. Если -1, то это означает, что в процессе выполнения запроса общее количество строк определить невозможно, но данных больше, чем задано в Limit.

 

В портале имеется страница диагностики Admin/Query.aspx, с которой можно сделать запрос через DBQuery2 с различными параметрами и получить вывод в табличном виде.

 

Замечания по форматам данных.

 

Выводимые данные должны содержать только символы, разрешенные для XML атрибутов, иначе в атрибуте будет выдано сообщение об ошибке <Error: Incorrect symbols>.

 

В базах данных Traffic Inspector везде используется системное время (по Гринвичу, универсальное, UTC). Если в SQL запросе используется время, то надо локальное время в нем преобразовать в системное. Также в выходных данных системное время надо преобразовать в локальное. Для выходных данных типа даты или времени используется формат ISO 8601 (см. функции-помощники для работы с этим форматом).

 

Для времени и даты в SQL запросе используется строковое выражение -

Для SQLite внутренний формат даты и времени типа "2005-02-25 01:02:03".
Для MSSQL см. документацию. Может быть любой поддерживаемый формат, например, ISO 8601, он удобен тем, что не завязан на региональные настройки.

 

Замечания по SQLite.

 

Описание SQLite можно найти на сайте проекта.

 

В Traffic Inspector для SQLite дополнительно к стандартным сделана реализация некоторых функций от Microsoft SQL server - GetDate, DatePart, DateAdd, DateDiff. Это удобно для формирования универсальных запросов.

 

Имеется возможность подключить любую другую базу данных. Для этого используйте запрос к любой базе SQLite (кроме APIDBType_Ext) и командой Attach подключите дополнительную базу. В дальнейшем база будет подключена в течение всего соединения интерфейса ITrafInspAdmin для запроса данного типа.

 

 


Текущая страница справки: http://help.smart-soft.ru/doc20/index.html?sdk_dbquery.htm

Сайт разработчиков Traffic Inspector