Работа с данными

Язык запросов

Поиск данных выполняется с помощью функций Query, QuerySimple, QueryObject:

void Query(string query, Message message);
void QuerySimple(string query, Message message);
void QueryObject(string query, Message message);
void Query(string query, PropertiesCollection parameters, Message message);
void QuerySimple(string query, PropertiesCollection parameters, Message message);
void QueryObject(string query, PropertiesCollection parameters, Message message);
void Query<T>(string query, IList<T> resultList);
void QuerySimple<T>(string query, IList<T> resultList);
void QueryObject<T>(string query, IList<T> resultList);
void Query<T>(string query, PropertiesCollection parameters, IList<T> resultList);
void QuerySimple<T>(string query, PropertiesCollection parameters, IList<T> resultList);
void QueryObject<T>(string query, PropertiesCollection parameters, IList<T> resultList);

где

  • string query: строка запроса.

  • PropertiesCollection parameters: параметры, передаваемые во WHERE.

  • IList<T> resultList или Message message: переменная, содержащая результаты поиска.

Batch-методы

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

void QueryBatch(string query, PropertiesCollection parameters, params System.Collections.IList[] resultList)
void QueryObjectBatch(string query, PropertiesCollection parameters, params System.Collections.IList[] resultList)
void QuerySimpleBatch(string query, PropertiesCollection parameters, params System.Collections.IList[] resultList)

где

  • string query: все запросы, разделенные с помощью GO.

    Примечание

    В строке запроса поддерживается только конструкция SELECT.

  • PropertiesCollection parameters: коллекция параметров, передаваемых в WHERE. Параметры заполняются в виде коллекции пар имя → значение простого типа. В запросе эти параметры используются как @paramName.

Пример заполнения parameters

var Переменная = new ЛичныйТип();
Переменная.Строка = "строка в типе";
Переменная.Число = 123;

PropertiesCollection parameters = new PropertiesCollection();
parameters.Add("Dep", 12);
parameters.Add("Reg", "EU");
parameters.Add("Text", Переменная.Строка);
parameters.Add("Number", Переменная.Число);
  • IList<T> resultList: переменные, содержащие результаты поиска.

    Внимание

    resultList должен содержать столько же переменных для получения результата, сколько запросов, разделенных GO, указано в query.

QueryBatch:

  1. Возвращает наборы объектов (каждый SELECT → список объектов).

  2. SELECT может вернуть много строк.

  3. Число SELECT = число списков-результатов.

string ТекстЗапроса = @"

SELECT Наименование, Код, Курс
FROM Валюта WHERE Наименование LIKE 'Рубль'

GO

SELECT Наименование, Код, Курс
FROM Валюта WHERE Код = '3'

";

 PropertiesCollection Параметры = new PropertiesCollection();

 DataBank.QueryBatch(ТекстЗапроса, Параметры, ВалютаРезультат1, ВалютаРезультат2);

QuerySimpleBatch:

  1. Возвращает простые типы (int/bool/string/decimal/date/guid).

  2. Каждый SELECT должен вернуть один столбец простого типа.

  3. Число SELECT = число списков.

string ТекстЗапроса = @"

SELECT Инт FROM Core6409 WHERE Бул = 'true'

GO

SELECT Бул FROM Core6409 WHERE Инт = '2'

GO

SELECT Стр FROM Core6409 WHERE Инт = '3'

GO

SELECT Дец FROM Core6409 WHERE Стр = 'четыре'

GO

SELECT Дат FROM Core6409 WHERE Бул = 'false'

GO

SELECT Гуи FROM Core6409 WHERE Инт > '2'

";

 PropertiesCollection Параметры = new PropertiesCollection();

 DataBank.QuerySimpleBatch(ТекстЗапроса, Параметры, Числа, Булеаны, Строки, Децималы, Даты, Гуиды);

QueryObjectBatch:

  1. Возвращает по одному объекту на SELECT.

  2. Каждый SELECT должен вернуть ровно одну строку.

  3. Число SELECT = число объектов-результатов.

var Переменная = new ЛичныйТип();
Переменная.Число = 123;

string query = @"
SELECT TOP 1 Object FROM Employee WHERE Id = @Id1

GO

SELECT TOP 1 Object FROM Contractors WHERE Id = @Id2
";

PropertiesCollection parameters = new PropertiesCollection();
parameters.Add("Id1", "100");
parameters.Add("Id2", Переменная.Число);

DataBank.QueryObjectBatch(query, parameters, EmployeeObj, ContractorObj);