首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

C# 精簡版 MySqlHelper 封裝:支援 ExecuteNonQuery/ExecuteScalar/ExecuteReader/ExecuteDataTable

     編輯:MySQL 綜合教學

C# 精簡版 MySqlHelper 封裝

專案中頻繁操作 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"]);
    }
}

設計要點

  • using 區塊:確保連線、命令、適配器正確 Dispose
  • 參數化:防 SQL 注入,支援 params 陣列彈性傳參
  • ExecuteReader 回傳 CloseConnection:呼叫端只需 using reader 即可自動關閉連線
  • 連線字串外部化:從 web.config/app.config 讀取,方便環境切換

擴充建議

  • 加入非同步版本 ExecuteNonQueryAsync 等
  • 整合 Dapper 或 Entity Framework Core 取代手寫 SQL
  • 加入連線重試、慢查詢記錄、分頁封裝
將 MySql 替換為 Sql 即可變身 SqlServerHelper,核心邏輯完全通用。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved