logo

Использование SQL запросов в сценариях

Для работы с SQL-базой используются стандартные классы C#.

В статье приведен пример получения списка пользователей с помощью SQL-запроса.

Внимание!
Сценарии, указанные ниже, актуальны для версий системы до 3.15.38 включительно.
Примечание
Следует обратить внимание, что необходимо использовать конструкцию using (…Reader reader = …) для предотвращения утечки памяти.
Для работы сценария необходима сборка:
System.Data

Пространства имен:

using System.Data.SqlClient;
Текст сценария:
string ConString = "Server=Server_name;Database=name_base;Trusted_Connection=True;"; //строка подключения к БД с использованием Windows авторизации

    	    using (SqlConnection connection = new SqlConnection(ConString))
            {
                using (SqlCommand command = connection.CreateCommand())
                {
                    command.CommandText = "select UserName from [User]";//текст запроса
                    connection.Open();
                    using (SqlDataReader reader = command.ExecuteReader())
                    {
                    while (reader.Read())
            			{
                        	Console.WriteLine(reader[0].ToString());//вывод результата на консоль
            			}
                    }
                } 
            }
Для работы с базой данных на сервере Firebird необходимо разграничить два случая: запрос выполняется к базе, на которой запущен сервер системы, либо к базе, с которой сейчас не выполняются какие-либо работы.
Пример работы с "активной базой данных":

Для работы сценария необходима сборка:

System.Data

Пространства имен:

using EleWise.ELMA.Services;
using EleWise.ELMA.Runtime.Db.Migrator.Framework;

Текст сценария:

var transformationProvider = Locator.GetServiceNotNull<ITransformationProvider>();//инициализируем службу
using (var reader = transformationProvider.ExecuteQuery(@"SELECT ""USERNAME"" FROM ""User"""))//указываем SQL-запрос для выполнения
  {
  while (reader.Read())
    {
      Console.WriteLine(reader[0].ToString());//вывод результата на консоль
    }
  }

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

Для работы необходима дополнительная сборка:

using FirebirdSql.Data.FirebirdClient;

Сценарий будет выглядеть следующим образом:

FbConnection fb;
FbConnectionStringBuilder fb_con = new FbConnectionStringBuilder();
fb_con.Charset = "WIN1251"; //используемая кодировка
fb_con.UserID = "sysdba"; //логин
fb_con.Password = "masterkey"; //пароль
fb_con.DataSource = "localhost"; // Указать, на каком компьютере развернут сервер Firebird
fb_con.Database = @"C:\ELMA3-Express\UserConfig\ELMA3-EXPRESS.FDB"; //путь к файлу базы данных
fb_con.ServerType = 0; //указываем тип сервера   
fb = new FbConnection(fb_con.ToString());//создаем подключение
fb.Open(); //открываем БД 
FbTransaction transaction = fb.BeginTransaction();// 
FbCommand command = new FbCommand(@"SELECT ""USERNAME"" FROM ""User""", fb, transaction);//Указываем SQL-запрос для выполнения 
using (FbDataReader reader = command.ExecuteReader()) //Инициализируем Reader
{
    while (reader.Read())
    {
        Console.WriteLine(reader[0].ToString());//Выводим результат на консоль
    }
} 
reader.Close();//закрываем подключение
fb.Close();