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

.NET 通用資料存取層 (DAL) 實作:工廠模式與泛型反射

     編輯:關於SqlServer

本文介紹一個適用於中小型專案的通用資料存取層(DAL),採用 DbProviderFactory 抽象廠商模式與泛型反射,支援任意 ADO.NET 提供者(SQL Server、Oracle、MySQL、PostgreSQL 等),僅需修改 web.config 連線字串即可切換資料庫。

核心特點

  • 資料庫無關:透過 DbProviderFactory 動態建立連線、命令、參數、DataAdapter。
  • 參數傳遞使用 Hashtable,鍵值對應預存程序參數名與值。
  • 封裝常用操作:GetDataSet、Insert(回傳新增識別值)、Update、Delete、ExecuteScalar。
  • 連線字串集中管理於 ConfigurationManager.ConnectionStrings["MyList"]。

核心類別結構

public class DBOperate
{
    // 取得連線字串設定
    private ConnectionStringSettings GetDBConnString() { ... }

    // 建立 Provider Factory
    private DbProviderFactory GetDBFactory() { ... }

    // 建立並開啟連線
    private DbConnection GetDBConn() { ... }

    // 執行查詢回傳 DataSet
    public DataSet GetDataSet(string spName, Hashtable parameters) { ... }

    // 執行 Insert/Update/Delete 回傳影響列數或輸出參數
    public int ExecuteNonQuery(string spName, Hashtable parameters) { ... }
}

關鍵實作細節

  1. 連線管理:每次操作建立新連線,用完即關閉(using 區塊),避免連線洩漏。
  2. 參數建立:遍歷 Hashtable,呼叫 factory.CreateParameter() 設定 ParameterName、Value、Direction。
  3. 預存程序呼叫:command.CommandType = CommandType.StoredProcedure。
  4. 例外處理:統一捕捉 DbException,記錄錯誤並拋出自訂例外。

設定範例 (web.config)

<connectionStrings>
  <add name="MyList"
       connectionString="Server=.;Database=MyDB;Uid=sa;Pwd=123;"
       providerName="System.Data.SqlClient" />
</connectionStrings>

切換至 Oracle 只需修改 providerName 為 Oracle.ManagedDataAccess.Client 並調整連線字串。

適用場景與限制

適合以預存程序為核心、邏輯相對固定的傳統企業應用。若需 ORM、LINQ、動態 SQL 建構,建議改用 Entity Framework 或 Dapper。

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