本文介紹一個適用於中小型專案的通用資料存取層(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) { ... }
}
using 區塊),避免連線洩漏。Hashtable,呼叫 factory.CreateParameter() 設定 ParameterName、Value、Direction。command.CommandType = CommandType.StoredProcedure。DbException,記錄錯誤並拋出自訂例外。<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。