using System.Data; using MySqlConnector; namespace MesETL.Shared.Helper; public static class DatabaseHelper { /// /// 创建一个MySql连接 /// /// /// public static MySqlConnection CreateConnection(string connStr) { var newConnStr = new MySqlConnectionStringBuilder(connStr) { ConnectionTimeout = 30, DefaultCommandTimeout = 0, }.ConnectionString; return new MySqlConnection(newConnStr); } /// /// 使用语句查询数据库 /// /// /// /// /// public static async Task QueryTableAsync(string connStr, string sql, CancellationToken ct = default) { await using var conn = CreateConnection(connStr); if(conn.State is not ConnectionState.Open) await conn.OpenAsync(ct); await using var cmd = conn.CreateCommand(); cmd.CommandText = sql; var ds = new DataSet(); new MySqlDataAdapter(cmd).Fill(ds); return ds; } /// /// 使用语句进行标量查询 /// /// /// /// /// public static async Task QueryScalarAsync(string connStr, string sql, CancellationToken ct = default) { await using var conn = CreateConnection(connStr); if(conn.State is not ConnectionState.Open) await conn.OpenAsync(ct); await using var cmd = conn.CreateCommand(); cmd.CommandText = sql; return await cmd.ExecuteScalarAsync(ct); } /// /// 执行非查询语句 /// /// /// /// /// public static async Task NonQueryAsync(string connStr, string sql, CancellationToken ct = default) { await using var conn = CreateConnection(connStr); if(conn.State is not ConnectionState.Open) await conn.OpenAsync(ct); await using var cmd = conn.CreateCommand(); cmd.CommandText = sql; return await cmd.ExecuteNonQueryAsync(ct); } /// /// 在事务中执行语句 /// /// /// /// /// public static async Task TransactionAsync(string connStr, string sql, params MySqlParameter[] parameters) { await using var conn = CreateConnection(connStr); 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; } }