DAM (Database Access Module) 是一個基於原生 ADO.NET 封裝的輕量級資料存取組件,核心優勢在於零侵入式跨數據庫支援。只要 SQL 語句符合標準,僅需修改配置檔即可在 SQL Server、SQLite、MySQL、Oracle 等不同數據庫間無縫切換,完全不需變動 DAL 層業務代碼。
web.config 定義連接字串與提供者,支援多數據庫並行存取。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 副檔名)
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 介面的場景。但需注意:
專案原始碼與文檔可至 Dam.rar 下載參考。