Вход/регистрация

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

Результирующий запрос изменяется в зависимости от массы сопутствующих условий (есть или нет данные для фильтрации, вид сортировки, и т.п.).

 

В рубрике: Новости    


Поделитесь ссылкой в: