首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# SQL Server 資料庫操作封裝類 DBHelper 完整實作

     編輯:關於C#

設計目標

參考微軟 SqlHelper 模式,封裝連線、命令、交易、資源釋放,提供 IDisposable 模式支援 using 區塊,簡化 ADO.NET 程式碼。

核心類別結構

public class DBHelper : IDisposable
{
    // 私有欄位
    private SqlConnection _conn;
    private SqlCommand _cmd;
    private bool _disposed;
    private int _cmdTimeout = 30;

    // 建構子
    public DBHelper(string connStr) { ... }
    public DBHelper(string connStr, int timeout) { ... }

    // 公開方法群
    // ExecuteNonQuery / ExecuteScalar / ExecuteDataTable / ExecuteDataReader
    // 支援 純 SQL / 參數化 SQL / StoredProcedure 三種重載
    // ExecuteTransaction 批次執行

    // 靜態輔助
    public static SqlParameter MakeInParam(...)

    // IDisposable 模式
    public void Dispose() { Dispose(true); GC.SuppressFinalize(this); }
    protected virtual void Dispose(bool disposing) { ... }
    ~DBHelper() { Dispose(false); }
}

使用範例

using (DBHelper db = new DBHelper(Config.ConnStr))
{
    // 參數化查詢
    int rows = db.ExecuteNonQuery(
        "UPDATE Users SET Status=@s WHERE Id=@id",
        new[] { DBHelper.MakeInParam("@s", SqlDbType.Int, 1),
                DBHelper.MakeInParam("@id", SqlDbType.Int, 100) });

    // 交易批次
    string[] cmds = { "INSERT ...", "UPDATE ..." };
    db.ExecuteTransaction(cmds);

    // 資料表
    DataTable dt = db.ExecuteDataTable("Users", "SELECT * FROM Users WHERE Age>@age",
        new[] { DBHelper.MakeInParam("@age", SqlDbType.Int, 18) });
}

關鍵實作細節

  • 連線管理:建構子開啟連線,Dispose 關閉並釋放 SqlConnection/SqlCommand。
  • 參數處理:MakeInParam 統一處理 null/DBNull.Value/空字串 → DBNull.Value。
  • 交易支援:ExecuteTransaction 開啟 SqlTransaction,逐條執行,失敗 Rollback,成功 Commit。
  • 資源釋放:finally 區塊確保 Command.Dispose()、Parameters.Clear()。
  • 逾時設定:CommandTimeout 屬性可調整。

改進建議 (現代化)

  • 改用 DbProviderFactory 支援多資料庫。
  • 採 async/await 非同步方法 (ExecuteNonQueryAsync 等)。
  • 整合 Dapper 或 Entity Framework Core 替代手寫 ADO.NET。
  • 連線池由 ADO.NET 自動管理,無需手動實作。

小結

DBHelper 以 using 區塊確保資源釋放,統一異常處理、參數建立、交易控制,是傳統 ADO.NET 專案的實用基礎設施。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved