Доступ к базе
В технологии Flexberry существуют следующие способы доступа к базе данных:
- Сервис данных. Для чтения данных возможно использование как
- Функции ограничения,
- так и LINQProvider).
- ADO.NET. Позволяет выполнять SQL-запросы из кода.
Примечание: ADO.NET НЕ ИСПОЛЬЗУЕТСЯ
в проектах в случаях, когда без него можно обойтись. Даже если возникла острая необходимость использовать ADO.NET, следует проверить, нельзя ли обойтись без него. Возможно, подойдет использование funcSQL.
Если говорить о применимости возможных способов вычитки данных, то: ADO.NET - используется только в случаях, когда не достаточно возможностей сервиса данных.
Формирование запроса в сервисе данных
Из чего складывается текст SQL-запроса, генерируемого сервисом данных:
- Настройки LoadingCustomizationStruct (работу по сортировке, наложению limitFunction, подчёту агрегирующих значений и прочим аналогичным действиям необходимо перекладывать на сервер за счёт задания параметров
LoadingCustomizationStruct
. - Атрибутивная разметка (например, атрибут
Storage
как классов, так и связей). - Реализация Inheritance с иcпользованием TypeUsage.
- Перехват запроса к БД.
Если посмотреть, какие запросы отправляет сервис данных на сервер, то в нём встречаются константы типа StormMainObjectKey
и STORMJoinedMasterKey
.
StormMainObjectKey
- первичный ключ (primarykey) объекта, по которому идёт вычитка из базы данных. КонстантаStormMainObjectKey
определена какICSSoft.STORMNET.FunctionalLanguage.SQLWhere.SQLWhereLanguageDef.StormMainObjectKey
.STORMJoinedMasterKey
. При организации вычитки из базы данных внешним ключам даются имена по типуSTORMJoinedMasterKey1
. ИспользоватьSTORMJoinedMasterKey
при построении ограничений в коде не рекомендуется, поскольку их порядок может меняться.
ADO.NET
Ниже представлен пример исполнения SQL-запросов через технологию ADO.Net:
var connection = (SqlConnection)((SQLDataService)DataServiceProvider.DataService).GetConnection(); // Получение подключения.
var command = new SqlCommand("SELECT SUM(purchase.\"Сумма\") "+
" FROM \"Покупатель\" customer join \"Покупка\" purchase on customer.\"primaryKey\" = purchase.\"Покупатель\" "+
" WHERE purchase.\"Покупатель\"=@Customer AND purchase.\"Статус\" = \'Оплачено\' ", connection); //формирование запроса
var parameter = new SqlParameter("@Customer", SqlDbType.UniqueIdentifier);
parameter.Value = ((KeyGuid)this.__PrimaryKey).Guid; // Определение значения параметра.
command.Parameters.Add(parameter);
try
{
connection.Open();
var value = (decimal)command.ExecuteScalar(); // Исполнение запроса.
}
finally
{
connection.Close();
}