20230818
This commit is contained in:
parent
7fad80bae1
commit
4617d02649
122
anbs_cpdb/Classes/MySqlEngine.cs
Normal file
122
anbs_cpdb/Classes/MySqlEngine.cs
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
using anbs_cp.Database.Interfaces;
|
||||||
|
using anbs_cp.Structs;
|
||||||
|
|
||||||
|
using Dapper;
|
||||||
|
|
||||||
|
using MySqlConnector;
|
||||||
|
|
||||||
|
namespace anbs_cp.Database.Classes;
|
||||||
|
|
||||||
|
public class MySqlEngine: IDbEngine
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Конструктор
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="connectionString">Строка подключения базы данных</param>
|
||||||
|
public MySqlEngine (string connectionString) => ConnectionString = connectionString;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Строка подключения базы данных
|
||||||
|
/// </summary>
|
||||||
|
public string ConnectionString { get; set; }
|
||||||
|
|
||||||
|
#region Небезопасные методы
|
||||||
|
/// <summary>
|
||||||
|
/// Выполняем команду
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="sql">Запрос</param>
|
||||||
|
/// <param name="model">Данные запроса</param>
|
||||||
|
/// <returns>Успешно ли (есть ли хотя бы одна затронутая строки) выполнена команда</returns>
|
||||||
|
public async Task<bool> ExecuteAsync (string sql, object model)
|
||||||
|
{
|
||||||
|
// Подключаемся к БД
|
||||||
|
await using MySqlConnection connection = new(ConnectionString);
|
||||||
|
|
||||||
|
// Открываем соединение
|
||||||
|
await connection.OpenAsync();
|
||||||
|
|
||||||
|
// Выполняем команду и выводим результат
|
||||||
|
return await connection.ExecuteAsync(sql, model) > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Запрос на получение одной строки
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Тип передаваемого значения</typeparam>
|
||||||
|
/// <param name="sql">Запрос</param>
|
||||||
|
/// <param name="model">Данные запроса</param>
|
||||||
|
/// <returns>Возвращает тип <see cref="T"/> или значение по умолчанию</returns>
|
||||||
|
public async Task<T> QueryRowAsync<T> (string sql, object model)
|
||||||
|
{
|
||||||
|
// Подключаемся к БД
|
||||||
|
await using MySqlConnection connection = new(ConnectionString);
|
||||||
|
|
||||||
|
// Открываем соединение
|
||||||
|
await connection.OpenAsync();
|
||||||
|
|
||||||
|
// Выполняем запрос и выводим результат
|
||||||
|
return await connection.QueryFirstOrDefaultAsync<T>(sql, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Запрос
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Тип передаваемого значения</typeparam>
|
||||||
|
/// <param name="sql">Запрос</param>
|
||||||
|
/// <param name="model">Данные запроса</param>
|
||||||
|
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
|
||||||
|
public async Task<IEnumerable<T>> QueryAsync<T> (string sql, object model)
|
||||||
|
{
|
||||||
|
// Подключаемся к БД
|
||||||
|
await using MySqlConnection? connection = new(ConnectionString);
|
||||||
|
|
||||||
|
// Открываем соединение
|
||||||
|
await connection.OpenAsync();
|
||||||
|
|
||||||
|
// Выполняем запрос и выводим результат
|
||||||
|
return await connection.QueryAsync<T>(sql, model);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Получение
|
||||||
|
public async Task<IEnumerable<T>> SelectAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy = null)
|
||||||
|
{
|
||||||
|
string sql = $@"SELECT
|
||||||
|
{(columns.Any() ? string.Join(", ", columns) : "*")}
|
||||||
|
FROM {table} ";
|
||||||
|
|
||||||
|
List<string> whereCondition = new();
|
||||||
|
|
||||||
|
List<string> paramsValues = new();
|
||||||
|
|
||||||
|
if (where.Any())
|
||||||
|
{
|
||||||
|
whereCondition.AddRange(where.Select(static whereItem => $"{whereItem.Key}=@{whereItem.Key}"));
|
||||||
|
paramsValues.AddRange(where.Select(static whereItem => $"@{whereItem.Key}={whereItem.Value}"));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (whereCondition.Any())
|
||||||
|
sql += $" WHERE {string.Join(", ", whereCondition.ToArray())}";
|
||||||
|
|
||||||
|
if (orderBy != null)
|
||||||
|
sql += $" ORDER BY {orderBy}";
|
||||||
|
|
||||||
|
return await QueryAsync<T>(sql, paramsValues.ToArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<T> SelectRowAsync<T> (string table, List<string> columns, KeyValue<string, string> where, string? orderBy = null) => throw new NotImplementedException();
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
public async Task<int> CountAsync (string table) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public async Task<TPit> InsertAsync<T, TPit> (string table, T entity, KeyValue<string, TPit> primaryIndex) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public async Task<bool> InsertUpdateAsync<T> (string table, T entity) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public async Task<bool> UpdateAsync<T> (string table, T entity, KeyValue<string, string> where) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public async Task<bool> DeleteAsync<T> (string table, KeyValue<string, string> where) => throw new NotImplementedException();
|
||||||
|
|
||||||
|
public async Task<bool> DeleteRowAsync<T> (string table, KeyValue<string, string> where) => throw new NotImplementedException();
|
||||||
|
}}
|
72
anbs_cpdb/Interfaces/IDbEngine.cs
Normal file
72
anbs_cpdb/Interfaces/IDbEngine.cs
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
using anbs_cp.Structs;
|
||||||
|
|
||||||
|
namespace anbs_cp.Database.Interfaces;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Интерфейс для работы с базой данных
|
||||||
|
/// </summary>
|
||||||
|
public interface IDbEngine
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Строка подключения
|
||||||
|
/// </summary>
|
||||||
|
string ConnectionString { get; set; }
|
||||||
|
|
||||||
|
#region Небезопасные методы
|
||||||
|
|
||||||
|
Task<bool> ExecuteAsync (string sql, object model);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Запрос на получение одной строки
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Тип передаваемого значения</typeparam>
|
||||||
|
/// <param name="sql">Запрос</param>
|
||||||
|
/// <param name="model">Данные запроса</param>
|
||||||
|
/// <returns>Возвращает тип <see cref="T"/> или значение по умолчанию</returns>
|
||||||
|
Task<T> QueryRowAsync<T> (string sql, object model);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Запрос
|
||||||
|
/// </summary>
|
||||||
|
/// <typeparam name="T">Тип передаваемого значения</typeparam>
|
||||||
|
/// <param name="sql">Запрос</param>
|
||||||
|
/// <param name="model">Данные запроса</param>
|
||||||
|
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
|
||||||
|
Task<IEnumerable<T>> QueryAsync<T> (string sql, object model);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Получение
|
||||||
|
Task<IEnumerable<T>> SelectAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy = null);
|
||||||
|
|
||||||
|
Task<T> SelectRowAsync<T> (string table, List<string> columns, KeyValue<string, string> where, string? orderBy = null);
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Вычисление числа элементов в таблице
|
||||||
|
|
||||||
|
Task<int> CountAsync (string table);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Добавление строки в таблицу
|
||||||
|
|
||||||
|
Task<TPit> InsertAsync<T, TPit> (string table, T entity, KeyValue<string, TPit> primaryIndex);
|
||||||
|
|
||||||
|
Task<bool> InsertUpdateAsync<T> (string table, T entity);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Обновление строки в таблице
|
||||||
|
|
||||||
|
Task<bool> UpdateAsync<T> (string table, T entity, KeyValue<string, string> where);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region Удаление строк
|
||||||
|
|
||||||
|
Task<bool> DeleteAsync<T> (string table, KeyValue<string, string> where);
|
||||||
|
|
||||||
|
Task<bool> DeleteRowAsync<T> (string table, KeyValue<string, string> where);
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
}
|
27
anbs_cpdb/anbs_cpdb.csproj
Normal file
27
anbs_cpdb/anbs_cpdb.csproj
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
|
<Nullable>enable</Nullable>
|
||||||
|
<AssemblyName>anbs_cp_db</AssemblyName>
|
||||||
|
<RootNamespace>anbs_cp.Database</RootNamespace>
|
||||||
|
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
|
||||||
|
<PackageId>ANBSoftware.ComponentsPack.Database</PackageId>
|
||||||
|
<Version>2023.08.18</Version>
|
||||||
|
<Company>Александр Бабаев</Company>
|
||||||
|
<Product>Набор компонентов ANB Software для работы с БД</Product>
|
||||||
|
<Description>Библиотека полезных методов языка C# для работы с базами данных</Description>
|
||||||
|
<Copyright>Александр Бабаев</Copyright>
|
||||||
|
<PackageProjectUrl>https://git.babaev-an.ru/babaev-an/anbsoftware_componentspack</PackageProjectUrl>
|
||||||
|
<RepositoryUrl>https://git.babaev-an.ru/babaev-an/anbsoftware_componentspack</RepositoryUrl>
|
||||||
|
<RepositoryType>git</RepositoryType>
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="ANBSoftware.ComponentsPack" Version="2023.813.1" />
|
||||||
|
<PackageReference Include="Dapper" Version="2.0.151" />
|
||||||
|
<PackageReference Include="MySqlConnector" Version="2.2.7" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
@ -17,6 +17,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "anbs_cpfn", "anbs_cpfn\anbs
|
|||||||
EndProject
|
EndProject
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "anbs_cposinfo", "anbs_cposinfo\anbs_cposinfo.csproj", "{80E1FEA9-EEDA-4411-8EBA-11991432E98E}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "anbs_cposinfo", "anbs_cposinfo\anbs_cposinfo.csproj", "{80E1FEA9-EEDA-4411-8EBA-11991432E98E}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "anbs_cpdb", "anbs_cpdb\anbs_cpdb.csproj", "{3796862F-F181-4A27-92D8-8BF13C4FD711}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug|Any CPU = Debug|Any CPU
|
Debug|Any CPU = Debug|Any CPU
|
||||||
@ -38,6 +40,10 @@ Global
|
|||||||
{80E1FEA9-EEDA-4411-8EBA-11991432E98E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{80E1FEA9-EEDA-4411-8EBA-11991432E98E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{80E1FEA9-EEDA-4411-8EBA-11991432E98E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{80E1FEA9-EEDA-4411-8EBA-11991432E98E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{80E1FEA9-EEDA-4411-8EBA-11991432E98E}.Release|Any CPU.Build.0 = Release|Any CPU
|
{80E1FEA9-EEDA-4411-8EBA-11991432E98E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
|
{3796862F-F181-4A27-92D8-8BF13C4FD711}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
|
{3796862F-F181-4A27-92D8-8BF13C4FD711}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
|
{3796862F-F181-4A27-92D8-8BF13C4FD711}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
|
{3796862F-F181-4A27-92D8-8BF13C4FD711}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user