Выполнить запрос
Eng: Execute query

Элемент выполняет запрос к базе данных (БД). В сценарии элемент может использоваться:
- внутри контейнера Присоединиться к БД;
- автономно — если другие действия с БД не предполагаются.
Рекомендации:
- Если вы работаете с MS SQL, то вместо использования встроенных элементов из группы База данных установите nuget-пакет Primo.Database.SqlServer.Linux — в нем есть поддержка именованных аргументов для SQL-запроса (через @Parameter).
- Если вы поместили запрос в контейнер Присоединиться к БД, то настройки соединения будут взяты из контейнера. Это значит, в элементе Выполнить запрос такие свойства, как Строка соединения, Соединение с БД, Тип БД заполнять не нужно — настройки в контейнере имеют приоритет.
- Если в сценарии вы сначала используете контейнер Присоединиться к БД, а сам запрос поместили ниже, вне контейнера, то в запросе можно указать активное подключение из контейнера. Для этого обратитесь к свойствам контейнера и сохраните активное подключение в переменную (свойство вывода Соединение с БД), а затем используйте эту переменную в элементе Выполнить запрос, в свойстве Соединение с БД.
Свойства
Символ * в названии свойства указывает на обязательность заполнения. Описание общих свойств см. в разделе Свойства элемента.
База данных
- Соединение с БД [LTools.Database.DatabaseInst] - Переменная, содержащая инстанс соединения с БД. Свойство заполняется, если вы хотите использовать ранее установленное и активное подключение к БД (см. п.3 рекомендаций). Если вы заполнили это свойство, оставьте пустыми свойства Строка соединения и Тип БД.
- Строка соединения [String] - Строка соединения, которая будет использована для установки подключения к базе данных. Вид строки зависит от выбранного типа БД и его драйвера. См. подробности для OLE DB и ODBC.
Строку можно сформировать автоматически по кнопке
— в этом случае откроется окно мастера (Wizard) Пример: 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 — это массив аргументов, а @par1 — имя первого аргумента массива (для запроса в Postgre). Описание аргументов массива см. в подразделе ниже"{\"Args\":[{\"Position\":0,\"Name\":\"@par1\",\"Script\":\"\\\"test\\\"\"}]}" - Аргументы (массив) [LTools.Database.Model.ArgumentsModel] - Аргументы запроса в виде массива. Описание аргументов см. в подразделе ниже
- Наличие результатов [Boolean] - Признак ожидания результатов запроса. Поставьте галочку, если запрос должен вернуть в ответ какие-то данные. Например, вы отправили
"SELECT * FROM tableи в ответе ожидаете данные из таблицы. Если же это запрос типаINSERT TO...илиDELETE FROM..., который не возвращает данные, то галочку ставить не нужно. - Таймаут [Int32] - Таймаут запроса в миллисекундах. Верхнее значение ограничено типом данных. Пример:
10000
Вывод:
- Кол-во [Int32] - Количество обработанных строк.
- Переменная (массив) [List<List<string>>] - Переменная для сохранения результатов запроса в массиве.
- Переменная (таблица) [System.Data.DataTable ] - Переменная для сохранения результатов запроса в Datatable.
Аргумент запроса
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"Во время выполнения команды имя аргумента будет заменено на его значение.
Только код
Пример использования элемента в процессе с типом Только код (Pure code):
C#
var connectionString = "Provider=SQLOLEDB;Data Source=<servername>;Initial Catalog=<dbname>;Integrated Security=SSPI";
var databaseType = LTools.Database.Model.DatabaseTypes.OleDB;
LTools.Database.DatabaseApp app = LTools.Database.DatabaseApp.Init(wf, connectionString, databaseType);
var query = "SELECT * FROM Table1";
var isMakeResult = true;
LTools.Database.Model.ArgumentsModel arguments = null;
var timeout = 10000;
List<List<string>> data = app.Execute(query, isMakeResultisMakeResult, arguments, timeout);