20230819-1

This commit is contained in:
Александр Бабаев 2023-08-19 18:12:03 +03:00
parent 9b37f0477e
commit cb8ffde7c0
3 changed files with 42 additions and 38 deletions

View File

@ -1,5 +1,4 @@
using anbs_cp.Database.Interfaces; using anbs_cp.Database.Interfaces;
using anbs_cp.Structs;
using Dapper; using Dapper;
@ -276,10 +275,9 @@ public class MySqlEngine: IDbEngine
// Создаю запрос // Создаю запрос
string sql = $""" string sql = $"""
UPDATE UPDATE {tableName}
{tableName}
SET SET
({properties}) {properties}
WHERE WHERE
{whereConditionColumn}=@{whereConditionColumn} {whereConditionColumn}=@{whereConditionColumn}
"""; """;
@ -302,10 +300,11 @@ public class MySqlEngine: IDbEngine
/// <summary> /// <summary>
/// Удаляет строки /// Удаляет строки
/// </summary> /// </summary>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
public async Task<bool> DeleteAsync (string tableName, KeyValue<string, object> where) public async Task<bool> DeleteAsync<T> (T data, string tableName, string whereConditionColumn) where T : class
{ {
// Создаю соединение // Создаю соединение
await using MySqlConnection connection = new(ConnectionString); await using MySqlConnection connection = new(ConnectionString);
@ -315,28 +314,31 @@ public class MySqlEngine: IDbEngine
DELETE FROM DELETE FROM
{tableName} {tableName}
WHERE WHERE
{where.Key}=@{where.Key} {whereConditionColumn}=@{whereConditionColumn}
"""; """;
// Выполняю запрос // Выполняю запрос
return await connection.ExecuteAsync(sql, new { where.Value }) > 0; return await connection.ExecuteAsync(sql, data) > 0;
} }
/// <summary> /// <summary>
/// Удаляет строки /// Удаляет строки
/// </summary> /// </summary>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
public bool Delete (string tableName, KeyValue<string, object> where) => DeleteAsync(tableName, where).GetAwaiter().GetResult(); public bool Delete<T> (T data, string tableName, string whereConditionColumn) where T : class =>
DeleteAsync(data, tableName, whereConditionColumn).GetAwaiter().GetResult();
/// <summary> /// <summary>
/// Удаляет строку /// Удаляет строку
/// </summary> /// </summary>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
public async Task<bool> DeleteRowAsync (string tableName, KeyValue<string, object> where) public async Task<bool> DeleteRowAsync<T> (T data, string tableName, string whereConditionColumn) where T : class
{ {
// Создаю соединение // Создаю соединение
await using MySqlConnection connection = new(ConnectionString); await using MySqlConnection connection = new(ConnectionString);
@ -346,20 +348,22 @@ public class MySqlEngine: IDbEngine
DELETE FROM DELETE FROM
{tableName} {tableName}
WHERE WHERE
{where.Key}=@{where.Key} {whereConditionColumn}=@{whereConditionColumn}
LIMIT 1 LIMIT 1
"""; """;
// Выполняю запрос // Выполняю запрос
return await connection.ExecuteAsync(sql, new { where.Value }) > 0; return await connection.ExecuteAsync(sql, data) > 0;
} }
/// <summary> /// <summary>
/// Удаляет строку /// Удаляет строку
/// </summary> /// </summary>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
public bool DeleteRow (string tableName, KeyValue<string, object> where) => DeleteRowAsync(tableName, where).GetAwaiter().GetResult(); public bool DeleteRow<T>(T data, string tableName, string whereConditionColumn) where T : class =>
DeleteRowAsync(data, tableName, whereConditionColumn).GetAwaiter().GetResult();
#endregion #endregion
} }

View File

@ -1,6 +1,4 @@
using anbs_cp.Structs; namespace anbs_cp.Database.Interfaces;
namespace anbs_cp.Database.Interfaces;
/// <summary> /// <summary>
/// Интерфейс для работы с базой данных /// Интерфейс для работы с базой данных
@ -112,7 +110,7 @@ public interface IDbEngine
/// <param name="sql">SQL-запрос</param> /// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param> /// <param name="values">Данные запроса</param>
/// <returns>Колонка данных или null</returns> /// <returns>Колонка данных или null</returns>
Task<IEnumerable<T>> GetColAsync<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>; Task<IEnumerable<T>> GetColAsync<T> (string sql, object values) where T: IComparable, IConvertible, IEquatable<T>;
/// <summary> /// <summary>
/// Получает колонку в массиве данных /// Получает колонку в массиве данных
@ -121,7 +119,7 @@ public interface IDbEngine
/// <param name="sql">SQL-запрос</param> /// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param> /// <param name="values">Данные запроса</param>
/// <returns>Колонка данных или null</returns> /// <returns>Колонка данных или null</returns>
IEnumerable<T> GetCol<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>; IEnumerable<T> GetCol<T> (string sql, object values) where T: IComparable, IConvertible, IEquatable<T>;
/// <summary> /// <summary>
/// Получение значение единичного поля /// Получение значение единичного поля
@ -130,7 +128,7 @@ public interface IDbEngine
/// <param name="sql">SQL-запрос</param> /// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param> /// <param name="values">Данные запроса</param>
/// <returns>Поле или null</returns> /// <returns>Поле или null</returns>
Task<T?> GetVarAsync<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>; Task<T?> GetVarAsync<T> (string sql, object values) where T: IComparable, IConvertible, IEquatable<T>;
/// <summary> /// <summary>
/// Получение значение единичного поля /// Получение значение единичного поля
@ -139,7 +137,7 @@ public interface IDbEngine
/// <param name="sql">SQL-запрос</param> /// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param> /// <param name="values">Данные запроса</param>
/// <returns>Поле или null</returns> /// <returns>Поле или null</returns>
T? GetVar<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>; T? GetVar<T> (string sql, object values) where T: IComparable, IConvertible, IEquatable<T>;
#endregion #endregion
@ -151,7 +149,7 @@ public interface IDbEngine
/// <param name="data">Данные</param> /// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
Task<bool> InsertAsync<T> (T data, string tableName) where T : class; Task<bool> InsertAsync<T> (T data, string tableName) where T: class;
/// <summary> /// <summary>
/// Вставляет данные в таблицу /// Вставляет данные в таблицу
@ -160,7 +158,7 @@ public interface IDbEngine
/// <param name="data">Данные</param> /// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
bool Insert<T> (T data, string tableName) where T : class; bool Insert<T> (T data, string tableName) where T: class;
/// <summary> /// <summary>
/// Обновляет строку в таблице /// Обновляет строку в таблице
@ -170,7 +168,7 @@ public interface IDbEngine
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
Task<bool> UpdateAsync<T> (T data, string tableName, string whereConditionColumn) where T : class; Task<bool> UpdateAsync<T> (T data, string tableName, string whereConditionColumn) where T: class;
/// <summary> /// <summary>
/// Обновляет строку в таблице /// Обновляет строку в таблице
@ -180,38 +178,42 @@ public interface IDbEngine
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
bool Update<T> (T data, string tableName, string whereConditionColumn) where T : class; bool Update<T> (T data, string tableName, string whereConditionColumn) where T: class;
/// <summary> /// <summary>
/// Удаляет строки /// Удаляет строки
/// </summary> /// </summary>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
Task<bool> DeleteAsync (string tableName, KeyValue<string, object> where); Task<bool> DeleteAsync<T> (T data, string tableName, string whereConditionColumn) where T: class;
/// <summary> /// <summary>
/// Удаляет строки /// Удаляет строки
/// </summary> /// </summary>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
bool Delete (string tableName, KeyValue<string, object> where); bool Delete<T> (T data, string tableName, string whereConditionColumn) where T: class;
/// <summary> /// <summary>
/// Удаляет строку /// Удаляет строку
/// </summary> /// </summary>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
Task<bool> DeleteRowAsync (string tableName, KeyValue<string, object> where); Task<bool> DeleteRowAsync <T> (T data, string tableName, string whereConditionColumn) where T: class;
/// <summary> /// <summary>
/// Удаляет строку /// Удаляет строку
/// </summary> /// </summary>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param> /// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param> /// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns> /// <returns>Результат выполнения</returns>
bool DeleteRow (string tableName, KeyValue<string, object> where); bool DeleteRow <T> (T data, string tableName, string whereConditionColumn) where T: class;
#endregion #endregion
} }

View File

@ -8,7 +8,7 @@
<RootNamespace>anbs_cp.Database</RootNamespace> <RootNamespace>anbs_cp.Database</RootNamespace>
<GeneratePackageOnBuild>True</GeneratePackageOnBuild> <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
<PackageId>ANBSoftware.ComponentsPack.Database</PackageId> <PackageId>ANBSoftware.ComponentsPack.Database</PackageId>
<Version>2023.08.19</Version> <Version>2023.08.19.4</Version>
<Company>Александр Бабаев</Company> <Company>Александр Бабаев</Company>
<Product>Набор компонентов ANB Software для работы с БД</Product> <Product>Набор компонентов ANB Software для работы с БД</Product>
<Description>Библиотека полезных методов языка C# для работы с базами данных</Description> <Description>Библиотека полезных методов языка C# для работы с базами данных</Description>
@ -19,10 +19,8 @@
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="ANBSoftware.ComponentsPack" Version="2023.813.1" />
<PackageReference Include="Dapper" Version="2.0.151" /> <PackageReference Include="Dapper" Version="2.0.151" />
<PackageReference Include="MySqlConnector" Version="2.2.7" /> <PackageReference Include="MySqlConnector" Version="2.2.7" />
<PackageReference Include="Z.Dapper.Plus" Version="6.0.2" />
</ItemGroup> </ItemGroup>
</Project> </Project>