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

DAM:輕量級跨數據庫 ADO.NET 存取組件

     編輯:ASP.NET 基礎

DAM 組件簡介

DAM (Database Access Module) 是一個基於原生 ADO.NET 封裝的輕量級資料存取組件,核心優勢在於零侵入式跨數據庫支援。只要 SQL 語句符合標準,僅需修改配置檔即可在 SQL Server、SQLite、MySQL、Oracle 等不同數據庫間無縫切換,完全不需變動 DAL 層業務代碼。

核心特性

  • 配置驅動:透過 web.config 定義連接字串與提供者,支援多數據庫並行存取。
  • 自動化生命週期管理:自動建立連接、執行命令、釋放資源,減少樣板代碼。
  • 高效能:基於原生 ADO.NET,僅透過反射一次載入提供者程式集,執行效率接近手寫代碼。
  • 參數自動映射:自動將通用 DbParameter 轉換為目標數據庫對應類型。

配置範例

<appSettings>
  <add key="rpsconnection" value="mssql"/>
  <add key="damconnection" value="sqlite" /> <!-- 預設連接 -->
</appSettings>

<connectionStrings>
  <add name="sqlite" 
       connectionString="" 
       providerName="System.Data.SQLite.SQLiteConnection;System.Data.SQLite" />
  <add name="mssql" 
       connectionString="" 
       providerName="System.Data.SqlClient.SqlConnection;System.Data" />
</connectionStrings>

providerName 格式:完整類名;程式集名稱 (不含 .dll 副檔名)

DAL 層使用範例

public class DALTest 
{
    // 簡單插入
    public int Insert() 
    {
        return Execute.SExecuteNonQuery("sp_name", null);
    }

    // 參數化插入 (自動轉換參數類型)
    public int Insert_Paras() 
    {
        DbParameter[] paras = {
            new MySqlParameter("p1", "p1value"),
            new SqlParameter("p2", "p2value")
        };
        return Execute.SExecuteNonQuery("sp_name", paras);
    }

    // 輸出參數獲取
    public int Insert_Paras(ref string outputValue) 
    {
        DbParameter[] paras = {
            new MySqlParameter("p1", "p1value"),
            new SqlParameter("p2_output", "") { Direction = ParameterDirection.Output }
        };
        int result = Execute.SExecuteNonQuery("sp_name", paras);
        if (paras[1].Value != null) outputValue = paras[1].Value.ToString();
        return result;
    }

    // 事務處理範例
    public bool Insert_Transaction() 
    {
        DbConnection conn = null;
        DbTransaction trans = null;
        try 
        {
            conn = Factory.CreateConnection();
            conn.Open();
            trans = conn.BeginTransaction();
            
            int r1 = Execute.SExecuteNonQuery(conn, trans, "sp_name1", paras);
            int r2 = Execute.SExecuteNonQuery(conn, trans, "INSERT ...", null);
            
            if (r1 > 0 && r2 > 0) { trans.Commit(); return true; }
            else { trans.Rollback(); return false; }
        }
        catch { trans?.Rollback(); return false; }
        finally 
        {
            trans?.Dispose();
            conn?.Close(); conn?.Dispose(); // 手動釋放
        }
    }
}

適用場景與限制

DAM 適合中小型專案、多數據庫支援需求明確、團隊希望統一 DAL 介面的場景。但需注意:

  1. SQL 語句必須符合目標數據庫語法 (如分頁、日期函數差異)。
  2. 複雜 ORM 功能 (導航屬性、延遲載入) 不在支援範圍內。
  3. 大型高併發系統建議採用成熟 ORM (EF Core, Dapper) 配合資料庫專用優化。

專案原始碼與文檔可至 Dam.rar 下載參考。

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