Выполнить запрос

Execute query

Элемент выполняет запрос к базе данных (БД). В сценарии элемент может использоваться:

Рекомендации:

  1. Если вы работаете с MS SQL, то вместо использования встроенных элементов из группы База данных установите nuget-пакет Primo.Database.SqlServer — в нем есть поддержка именованных аргументов для SQL-запроса (через @Parameter).

  2. Если вы поместили запрос в контейнер Присоединиться к БД, то настройки соединения будут взяты из контейнера. Это значит, в элементе Выполнить запрос такие свойства, как Строка соединения, Соединение с БД, Тип БД заполнять не нужно — настройки в контейнере имеют приоритет.

  3. Если в сценарии вы сначала используете контейнер Присоединиться к БД, а сам запрос поместили ниже, вне контейнера, то в запросе можно указать активное подключение из контейнера. Для этого обратитесь к свойствам контейнера и сохраните активное подключение в переменную (свойство вывода Соединение с БД), а затем используйте эту переменную в элементе Выполнить запрос, в свойстве Соединение с БД.

Свойства

Символ * в названии свойства указывает на обязательность заполнения. Описание общих свойств см. в разделе Свойства элемента.

СвойствоТипОписаниеПример

База данных:

Соединение с БД

LTools.Database.DatabaseInst

Переменная, содержащая инстанс соединения с БД. Свойство заполняется, если вы хотите использовать ранее установленное и активное подключение к БД (см. п.3 рекомендаций). Если вы заполнили это свойство, оставьте пустыми свойства Строка соединения и Тип БД

Строка соединения

String

Ole DB:

"Provider=SQLOLEDB;Data Source=<servername>;Initial Catalog=<dbname>;Integrated Security=SSPI"

PostgreSQL:

"Host=<host>;Port=5432;Password=<password>;Username=<username>;Database=<dbname>"

ODBC:

"DRIVER=<ODBC Driver>; SERVER=<host>; PORT=<port number>;DATABASE=<dbname>; USER=<username>; PASSWORD=<password>"

Тип БД

-

Тип базы данных. Нажмите на выпадающий список значений, чтобы выбрать доступный тип:

* Ole DB — по умолчанию;

* Postgre Sql;

* ODBC

Postgre Sql

Данные запроса:

Текст запроса*

String

Текст запроса SQL

Postgre:

"SELECT * FROM table1 WHERE column1 = @par1"

Аргументы (конструктор)

String

Результат из мастера:

"{\"Args\":[{\"Position\":0,\"Name\":\"@par1\",\"Script\":\"\\\"test\\\"\"}]}"

Где Args — это массив аргументов, а @par1 — имя первого аргумента массива (для запроса в Postgre). Описание аргументов массива см. в подразделе ниже

Аргументы (массив)

LTools.Database.Model.ArgumentsModel

Аргументы запроса в виде массива. Описание аргументов см. в подразделе ниже

Наличие результатов

Boolean

Признак ожидания результатов запроса. Поставьте галочку, если запрос должен вернуть в ответ какие-то данные. Например, вы отправили "SELECT * FROM table и в ответе ожидаете данные из таблицы. Если же это запрос типа INSERT TO... или DELETE FROM..., который не возвращает данные, то галочку ставить не нужно

Таймаут

Int32

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

10000

Вывод:

Кол-во

Int32

Количество обработанных строк

Переменная (массив)

List<List<string>>

Переменная для сохранения результатов запроса в массиве

Переменная (таблица)

Переменная для сохранения результатов запроса в Datatable

Окно мастера создания строки

🔹 Для ODBC мастер отсутствует.

Пример мастера для Ole DB:

Пример мастера для PostgreSQL:

После нажатия кнопки OK строка соединения сформируется автоматически и будет записана в соответствующее свойство.

Аргумент запроса

LTools.Database.Model.ArgumentsModel — это массив аргументов (Args).

Массив состоит из объектов LTools.Database.Model.ArgumentsModelItem — аргументов запроса. Каждый аргумент имеет следующие атрибуты:

  • Position — порядковый номер аргумента. Нумерация начинается с 0 (int).

  • Name — наименование аргумента (String).

  • Script — значение аргумента (Object).

🔸 Принцип использования аргументов зависит от типа БД:

1. Для Ole DB и ODBC в запросе вместо аргумента нужно указать знак ?. Пример:

"SELECT * FROM table1 WHERE id > ?"

Аргумент будет вставляться в запрос вместо знака ? соответственно заданной позиции. Атрибут имени для них не играет роли.

2. Для Postgre напротив, имя аргумента важно, поскольку в запросе можно использовать именованные аргументы (через @<parameterName>). Пример:

"SELECT * FROM table1 WHERE column1 = @par1"

Во время выполнения команды имя аргумента будет заменено на его значение.

Пример использования

RPA-проект, демонстрирующий работу элемента, можно найти в нашем публичном репозитории Learning.

  1. Скачайте архив со всеми обучающими материалами по ссылке: Скачать архив Learning.

  2. Распакуйте архив и откройте в Студии проект StudioActivities.

  3. Выберите процесс StudioActivities/Ru/База данных/Postgre.ltw для просмотра. Тип процесса — Последовательность.

Только код

Пример использования элемента в процессе с типом Только код (Pure code):

LTools.Database.DatabaseApp app = LTools.Database.DatabaseApp.Init(wf, "Provider=SQLOLEDB;Data Source=<servername>;Initial Catalog=<dbname>;Integrated Security=SSPI");
List<List<string>> data = app.Execute("SELECT * FROM Table1", true);
System.Data.DataTable tbl = app.ExecuteQueryTbl("SELECT * FROM Table1");

Last updated