Свойства Запроса к базе данных

<< Click to Display Table of Contents >>

Navigation:  Проект в MasterSCADA 4D > Дерево системы > Получение и отправка данных > Дополнительные протоколы > Протоколы для работы с базами данных >

Свойства Запроса к базе данных

Данные настройки производятся при работе с произвольными базами данных.

Вид панели свойств элементов Запрос MSSQL, Запрос PostgreSQL:

protocol_mssql

Описание:

Название

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

Категория Общие

Как правило, для данного элемента не настраивается. Подробное описание данной категории приведено в соответствующем разделе.

Категория Задача

Задается способ опроса базы данных. Подробное описание категории приведено в разделе, описывающем настройку категории Задачи.

Категория Настройки

Команда

Вводится SQL-запрос. Для чтения значений из канала в тексте запроса вводится имя выходного канала в фигурных скобках.

На приведенном рисунке L01_IN_Q_IN, L01_IZNOS_IN - каналы протокола, аналогичные переменные присутствуют в базе данных, к которой идет обращение, а "sPDK"."V_PLC_Message" - название таблицы в указанной базе данных. Параметр канала в режиме исполнения принимает значение, записанное в базе данных.

Для записи в базу данных используется команда  INSERT. Например, INSERT INTO table (column1, column2) VALUES ({output_channel1}, {output_channel2}) или INSERT INTO "TABLENAME"(DATA) VALUES({@Channelname}).

Важно! Необходимо ставить пробел после @Channelname, иначе запись не сработает. Channelname - имя выходного канала в дереве протокола.

В режиме исполнения, в случае невозможности выполнения запроса, параметр Ошибка принимает текстовое значение. Например, "Bad channel name: '@CHANNEL_NAME' in command: SQL_COMMAND" - канал не найден.

Синтаксис запросов для работы с базами данных

Есть два способа вставки данных в запрос:

текст запроса {ИмяКанала} текст запроса..

текст запроса {$ИмяКанала} текст запроса..

{CH} Данные и запрос передаются раздельно и "объединение" происходит на сервере БД.

Плюсы:

Защита от SQL-"инъекций"

Выполнение запроса происходит немного быстрее

Минусы:

Не во все части sql запроса можно вставить. Например, сервер БД не позволит выполнить такой запрос: select {CH1} from {CH2}

{$CH} Данные из каналов напрямую вставляются в тело запроса в момент отправки на сервер.

Плюсы:

Можно динамизировать запросы, т.е. писать запросы вида: select {$CH1} from {$CH2} where {$CH3} = {CH4}

Минусы:

Подстановка происходит как есть, без экранирования спецсиволов. Если в CH1 будет текст вида 1; DROP TABLE test; select 1он отправится на сервер и успешно там выполнится