52 lines
1.5 KiB
C#
52 lines
1.5 KiB
C#
using MySqlConnector;
|
|
using System.Data;
|
|
|
|
namespace SharpChat.MariaDB;
|
|
|
|
public class MariaDBConnection(MySqlConnection conn) : IDisposable {
|
|
public async Task<int> RunCommand(string command, params MySqlParameter[] parameters) {
|
|
using MySqlCommand cmd = conn.CreateCommand();
|
|
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 = conn.CreateCommand();
|
|
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 = conn.CreateCommand();
|
|
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;
|
|
conn.Dispose();
|
|
}
|
|
}
|