1 июля 2016 г.
Библиотека DBSql
В прошлом году мы начали работы над новой библиотекой доступа к базам данных «DBSql».
Библиотека написана на C#, использует низкоуровневые методы ADO.NET.
Реализованы следующие возможности:
- произвольные выборки полей из таблиц;
- условная и безусловная фильтрация данных;
- условная и безусловная сортировка;
- объединение таблиц;
- вложенные запросы;
- условный и безусловный вызов уточняющих цепочных методов;
- пэйджинг;
- составные запросы;
- добавление, изменение и удаление записей;
- выполнение скалярных функций;
- формирование и выполнение произвольных SQL-запросов;
- debug-канал для проверки SQL-выражений через NLog-API.
Результатом работы выборки записей могут быть списки структур записей, одиночные записи, скалярные значения.
Пример кода:
var aRecords = dbSql .Page(page).PageSize(pageSize) .Fields() .Call(CanEdit, self => self .JoinLeft(DBFields.F_CreateUser, SOH.usersDB.dbSql .TableAlias(CreatorUpdator.CREATOR) .Field(nameof(UsersRecord.FIO), "CreatorName") ) ) .Where(!L.isEmpty(pars.GidsList), DBFields.F_Gid, OPER_IN, pars.GidsList.Split(',')) .WhereOr(self => self .Where(PortfolioFields.F_ProjectName, OPER_HAS, pars.Txt) .Where(PortfolioFields.F_ProjectNameShort, OPER_HAS, pars.Txt) .Where(PortfolioFields.F_Company, OPER_HAS, pars.Txt) ) .Where(PortfolioFields.F_CompanyType, "=", pars.CompanyType) .Where(PortfolioFields.F_Category, "=", pars.Category) .Where(PortfolioFields.F_Status, "=", pars.Status) .Order(pars.Order == PortfolioFields.F_SiteRate, PortfolioFields.F_SiteRate + " DESC") .Order(PortfolioFields.F_DateStart + " DESC") .Select<ValueList>();
Результирующий запрос:
SELECT Portfolio.Gid, [тут много полей перечисляется], Portfolio.MetaKeywords, Portfolio.MetaDescription , Creator.FIO AS [CreatorName] FROM dbo.Portfolio AS Portfolio LEFT OUTER JOIN dbo.Users AS Creator ON ((Portfolio.CreateUser = Creator.Gid AND Creator.St >= 0)) WHERE (( ((Portfolio.ProjectName LIKE '%АЛМАЗ%')) OR ((Portfolio.ProjectNameShort LIKE '%АЛМАЗ%')) AND Portfolio.St >= 0) ORDER BY [SiteRate] DESC,[DateStart] DESC
Результирующий запрос изменяется в зависимости от массы сопутствующих условий (есть или нет данные для фильтрации, вид сортировки, и т.п.).
В рубрике: Новости