專案中頻繁操作 MySQL,將 ADO.NET 核心操作封裝為靜態工具類,支援參數化查詢、自動連線管理、資源釋放,程式碼精簡易維護。
using System;
using System.Data;
using MySql.Data.MySqlClient;
using System.Configuration;
public class MySqlHelper
{
private static readonly string connStr = ConfigurationManager.ConnectionStrings["connstr"].ConnectionString;
public static MySqlConnection CreateConnection()
{
var conn = new MySqlConnection(connStr);
conn.Open();
return conn;
}
/// 執行增刪改,返回影響行數
public static int ExecuteNonQuery(string sql, params MySqlParameter[] parameters)
{
using (var conn = CreateConnection())
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
if (parameters != null) cmd.Parameters.AddRange(parameters);
return cmd.ExecuteNonQuery();
}
}
/// 執行單值查詢,返回 object
public static object ExecuteScalar(string sql, params MySqlParameter[] parameters)
{
using (var conn = CreateConnection())
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
if (parameters != null) cmd.Parameters.AddRange(parameters);
return cmd.ExecuteScalar();
}
}
/// 執行讀取,返回 DataReader(需手動關閉連線)
public static MySqlDataReader ExecuteReader(string sql, params MySqlParameter[] parameters)
{
var conn = CreateConnection();
var cmd = conn.CreateCommand();
cmd.CommandText = sql;
if (parameters != null) cmd.Parameters.AddRange(parameters);
// CommandBehavior.CloseConnection 讓 Reader 關閉時自動關閉連線
return cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
/// 執行查詢,返回 DataTable
public static DataTable ExecuteDataTable(string sql, params MySqlParameter[] parameters)
{
var table = new DataTable();
using (var conn = CreateConnection())
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
if (parameters != null) cmd.Parameters.AddRange(parameters);
using (var adapter = new MySqlDataAdapter(cmd))
{
adapter.Fill(table);
}
}
return table;
}
}
// 1. 參數化查詢單值
int count = Convert.ToInt32(MySqlHelper.ExecuteScalar(
"SELECT COUNT(*) FROM users WHERE status = @status",
new MySqlParameter("@status", 1)));
// 2. 參數化新增
int rows = MySqlHelper.ExecuteNonQuery(
"INSERT INTO users(name, email) VALUES(@name, @email)",
new MySqlParameter("@name", "Tom"),
new MySqlParameter("@email", "tom@example.com"));
// 3. 查詢列表
DataTable dt = MySqlHelper.ExecuteDataTable(
"SELECT id, name FROM users WHERE create_time > @time",
new MySqlParameter("@time", DateTime.Now.AddDays(-7)));
// 4. 大資料流式讀取
using (var reader = MySqlHelper.ExecuteReader("SELECT * FROM logs WHERE level = @level",
new MySqlParameter("@level", "ERROR")))
{
while (reader.Read())
{
Console.WriteLine(reader["message"]);
}
}
web.config/app.config 讀取,方便環境切換ExecuteNonQueryAsync 等將MySql替換為Sql即可變身 SqlServerHelper,核心邏輯完全通用。