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

支援 SqlClient 與 OleDb 的 ADO.NET 通用資料存取類別

     編輯:關於.NET

設計目標

單一類別封裝 SqlConnection/SqlCommand/SqlDataAdapter 與 OleDbConnection/OleDbCommand/OleDbDataAdapter 兩套 API,透過建構函式參數 isSqlClient 切換提供者,統一對外介面。

核心結構

public class Omnipotence {
    private readonly bool _isSqlClient;
    private readonly string _connStr;
    private SqlConnection _sconn;
    private OleDbConnection _oconn;

    public Omnipotence(string connStr, bool isSqlClient = true) {
        _connStr = connStr; _isSqlClient = isSqlClient;
    }

    private void Open() { /* 依 _isSqlClient 建立/開啟對應連線 */ }
    private void Close() { /* 依 _isSqlClient 關閉對應連線 */ }

    private object CreateCommand(string sql, bool isStored, IDataParameter[] pars) { /* 回傳 SqlCommand/OleDbCommand */ }
    private object CreateAdapter(object cmd) { /* 回傳 SqlDataAdapter/OleDbDataAdapter */ }

統一執行介面

方法用途回傳
RunProc(sql, isStored, out int rows)執行非查詢影響列數
RunProc(sql, isStored, pars, out int rows)帶參數執行非查詢影響列數
RunProc(sql, isStored, out object scalar)執行純量查詢首行首欄
RunProc(sql, isStored, pars, out object scalar)帶參數純量查詢首行首欄
RunProc(sql, isStored, out SqlDataReader)讀取器(SqlClient)DataReader
RunProc(sql, isStored, out OleDbDataReader)讀取器(OleDb)DataReader
RunProc(sql, isStored, out DataSet)填充 DataSetDataSet
RunProc(sql, isStored, pars, out DataSet)帶參數填充 DataSetDataSet

關鍵實作細節

  • 所有 RunProc 內部呼叫 Open() → 執行 → Close(),確保連線及時釋放。
  • 參數陣列 IDataParameter[] 由呼叫端建立具體 SqlParameter 或 OleDbParameter,內部逐一 Add。
  • DataReader 使用 CommandBehavior.CloseConnection,讀取完畢自動關閉連線。
  • 採用 object 裝箱回傳命令/適配器,再由 isSqlClient 判斷拆箱轉型。

使用範例

// SQL Server
var db = new Omnipotence("Server=.;DB=Test;Uid=sa;Pwd=123;", true);
DataSet ds; db.RunProc("SELECT * FROM Users", false, out ds);

// Access / Excel
var db2 = new Omnipotence("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=data.mdb", false);
int rows; db2.RunProc("INSERT INTO Log(Msg) VALUES(?)", false, new[] { new OleDbParameter("Msg", "test") }, out rows);

優缺點評析

優點缺點
單一 API 支援多提供者,遷移成本低裝箱/拆箱有微小效能損耗
連線管理集中,不易洩漏DataReader 回傳型別不同,呼叫端需知曉提供者
參數化查詢統一,防 SQL Injection非泛型設計,現代專案建議改用 Dapper/EF Core

現代替代建議

  • Dapper:輕量 Micro-ORM,支援多提供者、高效能、泛型 API。
  • Entity Framework Core:完整 ORM,Provider 模式天然支援 SQL Server、SQLite、PostgreSQL、MySQL 等。
  • DbProviderFactory:.NET 內建抽象廠模式,比手工裝箱更標準。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved