This commit is contained in:
Alexander 2023-08-19 14:33:14 +03:00
parent 2fdb100ee0
commit 9b37f0477e
3 changed files with 456 additions and 146 deletions

View File

@ -20,14 +20,14 @@ public class MySqlEngine: IDbEngine
/// </summary>
public string ConnectionString { get; set; }
#region Небезопасные методы
#region Базовые операции
/// <summary>
/// Выполняем команду
/// </summary>
/// <param name="sql">Запрос</param>
/// <param name="model">Данные запроса</param>
/// <returns>Успешно ли (есть ли хотя бы одна затронутая строки) выполнена команда</returns>
public async Task<bool> ExecuteAsync (string sql, object model)
/// <param name="values">Данные запроса</param>
/// <returns>Количество затронутых строк</returns>
public async Task<int> ExecuteAsync (string sql, object values)
{
// Подключаемся к БД
await using MySqlConnection connection = new(ConnectionString);
@ -36,17 +36,25 @@ public class MySqlEngine: IDbEngine
await connection.OpenAsync();
// Выполняем команду и выводим результат
return await connection.ExecuteAsync(sql, model) > 0;
return await connection.ExecuteAsync(sql, values);
}
/// <summary>
/// Запрос на получение одной строки
/// Выполняем команду
/// </summary>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Количество затронутых строк</returns>
public int Execute (string sql, object values) => ExecuteAsync(sql, values).GetAwaiter().GetResult();
/// <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)
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
public async Task<IEnumerable<T>> QueryAsync<T> (string sql, object values)
{
// Подключаемся к БД
await using MySqlConnection connection = new(ConnectionString);
@ -55,7 +63,7 @@ public class MySqlEngine: IDbEngine
await connection.OpenAsync();
// Выполняем запрос и выводим результат
return await connection.QueryFirstOrDefaultAsync<T>(sql, model);
return await connection.QueryAsync<T>(sql, values);
}
/// <summary>
@ -63,9 +71,18 @@ public class MySqlEngine: IDbEngine
/// </summary>
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="model">Данные запроса</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
public async Task<IEnumerable<T>> QueryAsync<T> (string sql, object model)
public IEnumerable<T> Query<T> (string sql, object values) => QueryAsync<T>(sql, values).GetAwaiter().GetResult();
/// <summary>
/// Запрос строки
/// </summary>
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
public async Task<T?> QueryRowAsync<T> (string sql, object values)
{
// Подключаемся к БД
await using MySqlConnection connection = new(ConnectionString);
@ -74,105 +91,275 @@ public class MySqlEngine: IDbEngine
await connection.OpenAsync();
// Выполняем запрос и выводим результат
return await connection.QueryAsync<T>(sql, model);
return await connection.QuerySingleOrDefaultAsync<T>(sql, values);
}
/// <summary>
/// Запрос строки
/// </summary>
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
public T? QueryRow<T> (string sql, object values) => QueryRowAsync<T>(sql, values).GetAwaiter().GetResult();
#endregion
#region Получение
#region Получение данных
/// <summary>
/// Получает массив данных (SELECT * FROM...)
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Массив результата запроса</returns>
public async Task<IEnumerable<T>> GetResultsAsync<T> (string sql, object values) => await QueryAsync<T>(sql, values);
/// <summary>
/// Выборка данных из таблицы
/// Получает массив данных (SELECT * FROM...)
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="table">Имя таблицы</param>
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
/// <param name="orderBy">Сортировка</param>
/// <param name="limit">Сколько максимально элементов должно быть в выборке (0 -- без ограничения)</param>
/// <returns>Массив типа <see cref="T"/></returns>
public async Task<IEnumerable<T>> SelectAsync<T>(string table, string[] columns,
List<KeyValue<string, string>> where, string? orderBy, int limit = 0)
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Массив результата запроса</returns>
public IEnumerable<T> GetResults<T> (string sql, object values) => GetResultsAsync<T>(sql, values).GetAwaiter().GetResult();
/// <summary>
/// Получает строку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Строки данных или null</returns>
public async Task<T?> GetRowAsync<T> (string sql, object values)
{
// Формирую запрос
// Подключаемся к БД
await using MySqlConnection connection = new(ConnectionString);
// Открываем соединение
await connection.OpenAsync();
// Выполняем запрос и выводим результат
return await connection.QuerySingleOrDefaultAsync<T>(sql, values);
}
/// <summary>
/// Получает строку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Строки данных или null</returns>
public T? GetRow<T> (string sql, object values) => GetRowAsync<T>(sql, values).GetAwaiter().GetResult();
/// <summary>
/// Получает колонку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Колонка данных или null</returns>
public async Task<IEnumerable<T>> GetColAsync<T> (string sql, object values)
where T : IComparable, IConvertible, IEquatable<T> => await QueryAsync<T>(sql, values);
/// <summary>
/// Получает колонку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Колонка данных или null</returns>
public IEnumerable<T> GetCol<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T> =>
GetColAsync<T>(sql, values).GetAwaiter().GetResult();
/// <summary>
/// Получение значение единичного поля
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Поле или null</returns>
public async Task<T?> GetVarAsync<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>
{
// Подключаемся к БД
await using MySqlConnection connection = new(ConnectionString);
// Открываем соединение
await connection.OpenAsync();
// Выполняем запрос и выводим результат
return await connection.QuerySingleOrDefaultAsync<T>(sql, values);
}
/// <summary>
/// Получение значение единичного поля
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Поле или null</returns>
public T? GetVar<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T> =>
GetVarAsync<T>(sql, values).GetAwaiter().GetResult();
#endregion
#region CRUD данные
/// <summary>
/// Вставляет данные в таблицу
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <returns>Результат выполнения</returns>
public async Task<bool> InsertAsync<T> (T data, string tableName) where T : class
{
// Получение список имён свойств в data
List<string> propertyNamesList = (from dataProperty in data.GetType().GetProperties() select dataProperty.Name).ToList();
// Получаем список имён в data, обрамленные @
List<string> propertyValuesList = propertyNamesList.Select(static propertyName => $"@{propertyName}").ToList();
//Получаем строку имён свойств
string propertyNames = string.Join(", ", propertyNamesList.ToArray());
// Получаем строку имён свойств, обрамленных @
string propertyValues = string.Join(", ", propertyValuesList.ToArray());
// Создаю соединение
await using MySqlConnection connection = new(ConnectionString);
// Создаю запрос
string sql = $"""
SELECT
{(columns.Any() ? string.Join(", ", columns) : "*")}
FROM {table}
INSERT
INTO {tableName} ({propertyNames})
VALUES ({propertyValues})
""";
// Создаю массив where параметров
List<string> whereCondition = new();
// Создаю массив значений
List<string> paramsValues = new();
// Если заданы параметры where
if (where.Any())
{
// - то формирую массив where из where-запроса
whereCondition.AddRange(where.Select(static whereItem => $"{whereItem.Key}=@{whereItem.Key}"));
// - и значения параметров
paramsValues.AddRange(where.Select(static whereItem => $"@{whereItem.Key}={whereItem.Value}"));
}
// Если массив where параметров не пуст
if (whereCondition.Any())
// - то добавляю к запросу
sql += $" WHERE {string.Join(", ", whereCondition.ToArray())}";
// Если добавлена сортировка
if (orderBy != null)
// - то добавляю сортировку к запросу
sql += $" ORDER BY {orderBy}";
// Если установлено запрашиваемое число элементов
if (limit > 0)
// - то вводим ограничение
sql += $" LIMIT {limit}";
// Осуществляю запрос и возвращаю результат
return await QueryAsync<T>(sql, paramsValues.ToArray());
// Выполняю запрос
return await connection.ExecuteAsync(sql, data) > 0;
}
/// <summary>
/// Выборка строки из таблицы
/// Вставляет данные в таблицу
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="table">Имя таблицы</param>
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
/// <param name="orderBy">Сортировка</param>
/// <returns>Тип <see cref="T"/> или null</returns>
public async Task<T?> SelectRowAsync<T>(string table, string[] columns, List<KeyValue<string, string>> where,
string? orderBy = null) => (await SelectAsync<T>(table, columns, where, orderBy, 1)).FirstOrDefault();
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <returns>Результат выполнения</returns>
public bool Insert<T> (T data, string tableName) where T : class => InsertAsync(data, tableName).GetAwaiter().GetResult();
#endregion
#region Вычисление числа элементов в таблице
/// <summary>
/// Вычисляет число строк в таблице <paramref name="table"/>
/// </summary>
/// <param name="table">Таблица</param>
/// <returns>Число строк в таблице <paramref name="table"/></returns>
public async Task<int> CountAsync(string table)
/// <summary>
/// Обновляет строку в таблице
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns>
public async Task<bool> UpdateAsync<T> (T data, string tableName, string whereConditionColumn) where T : class
{
// Задаю запрос
string sql = $"SELECT COUNT(*) FROM {table}";
// Получение список имён свойств в data
List<string> propertyNamesList = (from dataProperty in data.GetType().GetProperties()
where dataProperty.Name != whereConditionColumn
select dataProperty.Name).ToList();
// Получаем список имён в data, обрамленные @
List<string> propertyKeyValuesList = propertyNamesList.Select(static propertyName => $"{propertyName}=@{propertyName}").ToList();
// Получаем строку имён свойств, обрамленных @
string properties = string.Join(", ", propertyKeyValuesList.ToArray());
// Создаю соединение
await using MySqlConnection connection = new(ConnectionString);
// Создаю запрос
string sql = $"""
UPDATE
{tableName}
SET
({properties})
WHERE
{whereConditionColumn}=@{whereConditionColumn}
""";
// Выполняю запрос
return (await QueryAsync<int>(sql, new())).FirstOrDefault();
return await connection.ExecuteAsync(sql, data) > 0;
}
/// <summary>
/// Обновляет строку в таблице
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns>
public bool Update<T> (T data, string tableName, string whereConditionColumn) where T : class =>
UpdateAsync(data, tableName, whereConditionColumn).GetAwaiter().GetResult();
/// <summary>
/// Удаляет строки
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
public async Task<bool> DeleteAsync (string tableName, KeyValue<string, object> where)
{
// Создаю соединение
await using MySqlConnection connection = new(ConnectionString);
// Создаю запрос
string sql = $"""
DELETE FROM
{tableName}
WHERE
{where.Key}=@{where.Key}
""";
// Выполняю запрос
return await connection.ExecuteAsync(sql, new { where.Value }) > 0;
}
/// <summary>
/// Удаляет строки
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
public bool Delete (string tableName, KeyValue<string, object> where) => DeleteAsync(tableName, where).GetAwaiter().GetResult();
/// <summary>
/// Удаляет строку
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
public async Task<bool> DeleteRowAsync (string tableName, KeyValue<string, object> where)
{
// Создаю соединение
await using MySqlConnection connection = new(ConnectionString);
// Создаю запрос
string sql = $"""
DELETE FROM
{tableName}
WHERE
{where.Key}=@{where.Key}
LIMIT 1
""";
// Выполняю запрос
return await connection.ExecuteAsync(sql, new { where.Value }) > 0;
}
/// <summary>
/// Удаляет строку
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
public bool DeleteRow (string tableName, KeyValue<string, object> where) => DeleteRowAsync(tableName, where).GetAwaiter().GetResult();
#endregion
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();
}

View File

@ -12,84 +12,206 @@ public interface IDbEngine
/// </summary>
string ConnectionString { get; set; }
#region Небезопасные методы
Task<bool> ExecuteAsync (string sql, object model);
#region Базовые операции
/// <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);
/// <param name="values">Данные запроса</param>
/// <returns>Количество затронутых строк</returns>
Task<int> ExecuteAsync (string sql, object values);
/// <summary>
/// Выполняем команду
/// </summary>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Количество затронутых строк</returns>
int Execute (string sql, object values);
/// <summary>
/// Запрос
/// </summary>
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="model">Данные запроса</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
Task<IEnumerable<T>> QueryAsync<T> (string sql, object model);
#endregion
#region Получение
Task<IEnumerable<T>> QueryAsync<T> (string sql, object values);
/// <summary>
/// Выборка данных из таблицы
/// Запрос
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="table">Имя таблицы</param>
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
/// <param name="orderBy">Сортировка</param>
/// <param name="limit">Сколько максимально элементов должно быть в выборке (0 -- без ограничения)</param>
/// <returns>Массив типа <see cref="T"/></returns>
Task<IEnumerable<T>> SelectAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy, int limit = 0);
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
IEnumerable<T> Query<T> (string sql, object values);
/// <summary>
/// Выборка строки из таблицы
/// Запрос строки
/// </summary>
/// <typeparam name="T">Тип данных</typeparam>
/// <param name="table">Имя таблицы</param>
/// <param name="columns">Выбор столбцов таблицы, которые должны попасть в выборку (пустая -- все)</param>
/// <param name="where">Массив значений столбцов, которые должны попасть в выборку</param>
/// <param name="orderBy">Сортировка</param>
/// <returns>Тип <see cref="T"/> или null</returns>
Task<T?> SelectRowAsync<T> (string table, string[] columns, List<KeyValue<string, string>> where, string? orderBy = null);
#endregion
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
Task<T?> QueryRowAsync<T> (string sql, object values);
#region Вычисление числа элементов в таблице
/// <summary>
/// Вычисляет число строк в таблице <paramref name="table"/>
/// Запрос строки
/// </summary>
/// <param name="table">Таблица</param>
/// <returns>Число строк в таблице <paramref name="table"/></returns>
Task<int> CountAsync (string table);
/// <typeparam name="T">Тип передаваемого значения</typeparam>
/// <param name="sql">Запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Возвращает массив типа <see cref="T"/> или значение по умолчанию</returns>
T? QueryRow<T> (string sql, object values);
#endregion
#region Добавление строки в таблицу
#region Получение данных
Task<TPit> InsertAsync<T, TPit> (string table, T entity, KeyValue<string, TPit> primaryIndex);
/// <summary>
/// Получает массив данных (SELECT * FROM...)
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Массив результата запроса</returns>
Task<IEnumerable<T>> GetResultsAsync<T> (string sql, object values);
Task<bool> InsertUpdateAsync<T> (string table, T entity);
/// <summary>
/// Получает массив данных (SELECT * FROM...)
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Массив результата запроса</returns>
IEnumerable<T> GetResults<T> (string sql, object values);
/// <summary>
/// Получает строку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Строки данных или null</returns>
Task<T?> GetRowAsync<T> (string sql, object values);
/// <summary>
/// Получает строку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Строки данных или null</returns>
T? GetRow<T> (string sql, object values);
/// <summary>
/// Получает колонку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Колонка данных или null</returns>
Task<IEnumerable<T>> GetColAsync<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>;
/// <summary>
/// Получает колонку в массиве данных
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Колонка данных или null</returns>
IEnumerable<T> GetCol<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>;
/// <summary>
/// Получение значение единичного поля
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Поле или null</returns>
Task<T?> GetVarAsync<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>;
/// <summary>
/// Получение значение единичного поля
/// </summary>
/// <typeparam name="T">Тип получаемых данных</typeparam>
/// <param name="sql">SQL-запрос</param>
/// <param name="values">Данные запроса</param>
/// <returns>Поле или null</returns>
T? GetVar<T> (string sql, object values) where T : IComparable, IConvertible, IEquatable<T>;
#endregion
#region Обновление строки в таблице
#region CRUD данные
/// <summary>
/// Вставляет данные в таблицу
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <returns>Результат выполнения</returns>
Task<bool> InsertAsync<T> (T data, string tableName) where T : class;
Task<bool> UpdateAsync<T> (string table, T entity, KeyValue<string, string> where);
/// <summary>
/// Вставляет данные в таблицу
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <returns>Результат выполнения</returns>
bool Insert<T> (T data, string tableName) where T : class;
#endregion
/// <summary>
/// Обновляет строку в таблице
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns>
Task<bool> UpdateAsync<T> (T data, string tableName, string whereConditionColumn) where T : class;
#region Удаление строк
/// <summary>
/// Обновляет строку в таблице
/// </summary>
/// <typeparam name="T">Класс данных</typeparam>
/// <param name="data">Данные</param>
/// <param name="tableName">Имя таблицы</param>
/// <param name="whereConditionColumn">Условие поиска строки. ВНИМАНИЕ! Должно быть одним из указанных свойств типа класса data</param>
/// <returns>Результат выполнения</returns>
bool Update<T> (T data, string tableName, string whereConditionColumn) where T : class;
Task<bool> DeleteAsync<T> (string table, KeyValue<string, string> where);
/// <summary>
/// Удаляет строки
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
Task<bool> DeleteAsync (string tableName, KeyValue<string, object> where);
Task<bool> DeleteRowAsync<T> (string table, KeyValue<string, string> where);
/// <summary>
/// Удаляет строки
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
bool Delete (string tableName, KeyValue<string, object> where);
/// <summary>
/// Удаляет строку
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
Task<bool> DeleteRowAsync (string tableName, KeyValue<string, object> where);
/// <summary>
/// Удаляет строку
/// </summary>
/// <param name="tableName">Имя таблицы</param>
/// <param name="where">Условие</param>
/// <returns>Результат выполнения</returns>
bool DeleteRow (string tableName, KeyValue<string, object> where);
#endregion
}

View File

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