2024-01-19 11:17:22 +08:00
|
|
|
|
using System.Data;
|
|
|
|
|
using MySqlConnector;
|
|
|
|
|
|
2024-02-10 17:12:26 +08:00
|
|
|
|
namespace MesETL.Shared.Helper;
|
2024-01-19 11:17:22 +08:00
|
|
|
|
|
|
|
|
|
public static class DatabaseHelper
|
|
|
|
|
{
|
2024-02-05 16:47:36 +08:00
|
|
|
|
public static MySqlConnection CreateConnection(string connStr)
|
|
|
|
|
{
|
|
|
|
|
var newConnStr = new MySqlConnectionStringBuilder(connStr)
|
|
|
|
|
{
|
|
|
|
|
ConnectionTimeout = 30,
|
|
|
|
|
DefaultCommandTimeout = 0,
|
|
|
|
|
}.ConnectionString;
|
|
|
|
|
return new MySqlConnection(newConnStr);
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-10 17:12:26 +08:00
|
|
|
|
public static async Task<DataSet> QueryTableAsync(string connStr, string sql, CancellationToken ct = default)
|
2024-01-19 11:17:22 +08:00
|
|
|
|
{
|
2024-02-05 16:47:36 +08:00
|
|
|
|
await using var conn = CreateConnection(connStr);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
if(conn.State is not ConnectionState.Open)
|
2024-02-10 17:12:26 +08:00
|
|
|
|
await conn.OpenAsync(ct);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
await using var cmd = conn.CreateCommand();
|
|
|
|
|
cmd.CommandText = sql;
|
|
|
|
|
var ds = new DataSet();
|
2024-02-01 15:25:42 +08:00
|
|
|
|
new MySqlDataAdapter(cmd).Fill(ds);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
return ds;
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-10 17:12:26 +08:00
|
|
|
|
public static async Task<object?> QueryScalarAsync(string connStr, string sql, CancellationToken ct = default)
|
2024-01-19 11:17:22 +08:00
|
|
|
|
{
|
2024-02-05 16:47:36 +08:00
|
|
|
|
await using var conn = CreateConnection(connStr);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
if(conn.State is not ConnectionState.Open)
|
2024-02-10 17:12:26 +08:00
|
|
|
|
await conn.OpenAsync(ct);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
await using var cmd = conn.CreateCommand();
|
|
|
|
|
cmd.CommandText = sql;
|
2024-02-10 17:12:26 +08:00
|
|
|
|
return await cmd.ExecuteScalarAsync(ct);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
2024-02-10 17:12:26 +08:00
|
|
|
|
public static async Task<int> NonQueryAsync(string connStr, string sql, CancellationToken ct = default)
|
2024-01-19 11:17:22 +08:00
|
|
|
|
{
|
2024-02-05 16:47:36 +08:00
|
|
|
|
await using var conn = CreateConnection(connStr);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
if(conn.State is not ConnectionState.Open)
|
2024-02-10 17:12:26 +08:00
|
|
|
|
await conn.OpenAsync(ct);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
await using var cmd = conn.CreateCommand();
|
|
|
|
|
cmd.CommandText = sql;
|
2024-02-10 17:12:26 +08:00
|
|
|
|
return await cmd.ExecuteNonQueryAsync(ct);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static async Task<int> TransactionAsync(string connStr, string sql, params MySqlParameter[] parameters)
|
|
|
|
|
{
|
2024-02-05 16:47:36 +08:00
|
|
|
|
await using var conn = CreateConnection(connStr);
|
2024-01-19 11:17:22 +08:00
|
|
|
|
if(conn.State is not ConnectionState.Open)
|
|
|
|
|
await conn.OpenAsync();
|
|
|
|
|
await using var trans = await conn.BeginTransactionAsync();
|
|
|
|
|
await using var cmd = conn.CreateCommand();
|
|
|
|
|
cmd.CommandText = sql;
|
|
|
|
|
cmd.Transaction = trans;
|
|
|
|
|
cmd.Parameters.AddRange(parameters);
|
|
|
|
|
var rows = await cmd.ExecuteNonQueryAsync();
|
|
|
|
|
await trans.CommitAsync();
|
|
|
|
|
return rows;
|
|
|
|
|
}
|
|
|
|
|
}
|