This repository has been archived on 2025-02-17. You can view files and clone it, but cannot push or open issues or pull requests.
BreCal/src/brecal.mysql/DBManager.cs

58 lines
1.8 KiB
C#

using brecal.model;
using MySqlConnector;
using System.Data;
using static brecal.model.IDBManager;
namespace brecal.mysql
{
public class DBManager : IDBManager
{
private static string _connectionString = "";
public static void SetConnectionString(string connectionString)
{
_connectionString = connectionString;
}
public async Task<List<DbEntity>> Load(QueryFunc prepareAction, LoadFunc<IDataReader> loadAction, params object?[] args)
{
await using MySqlConnection connection = new MySqlConnection(_connectionString);
await connection.OpenAsync();
using MySqlCommand cmd = new();
cmd.Connection = connection;
prepareAction(cmd, args);
MySqlDataReader reader = await cmd.ExecuteReaderAsync();
List<DbEntity> result = loadAction(reader);
reader.Close();
return result;
}
public async Task<object?> ExecuteScalar(Action<IDbCommand> prepareAction)
{
await using MySqlConnection connection = new MySqlConnection(_connectionString);
await connection.OpenAsync();
using MySqlCommand cmd = new();
cmd.Connection = connection;
prepareAction(cmd);
object? result = await cmd.ExecuteScalarAsync();
return result;
}
public async Task<int> ExecuteNonQuery(Action<IDbCommand> prepareAction)
{
await using MySqlConnection connection = new(_connectionString);
await connection.OpenAsync();
using MySqlCommand cmd = new();
cmd.Connection = connection;
prepareAction(cmd);
await cmd.ExecuteNonQueryAsync();
int result = (int)cmd.LastInsertedId;
return result;
}
}
}