sharp-chat/SharpChat.MariaDB/MariaDBConnection.cs
2025-04-29 22:14:51 +00:00

57 lines
1.7 KiB
C#

using MySqlConnector;
using System.Data;
namespace SharpChat.MariaDB;
public class MariaDBConnection(MySqlConnection conn) : IDisposable {
public MySqlConnection Connection { get; } = conn;
public async Task<int> RunCommand(string command, params MySqlParameter[] parameters) {
using MySqlCommand cmd = Connection.CreateCommand();
cmd.Parameters.Clear();
if(parameters?.Length > 0)
cmd.Parameters.AddRange(parameters);
cmd.CommandText = command;
return await cmd.ExecuteNonQueryAsync();
}
public async Task<MySqlDataReader?> RunQuery(string command, params MySqlParameter[] parameters) {
using MySqlCommand cmd = Connection.CreateCommand();
cmd.Parameters.Clear();
if(parameters?.Length > 0)
cmd.Parameters.AddRange(parameters);
cmd.CommandText = command;
return await cmd.ExecuteReaderAsync(CommandBehavior.CloseConnection);
}
public async Task<T> RunQueryValue<T>(string command, params MySqlParameter[] parameters)
where T : struct {
using MySqlCommand cmd = Connection.CreateCommand();
cmd.Parameters.Clear();
if(parameters?.Length > 0)
cmd.Parameters.AddRange(parameters);
cmd.CommandText = command;
await cmd.PrepareAsync();
object? raw = await cmd.ExecuteScalarAsync();
return raw is T value ? value : default;
}
private bool disposed = false;
~MariaDBConnection() {
DoDispose();
}
public void Dispose() {
DoDispose();
GC.SuppressFinalize(this);
}
private void DoDispose() {
if(disposed)
return;
disposed = true;
Connection.Dispose();
}
}