Bee.Db 的 DbAccess 封裝常見的資料庫操作,最大特色是:以 DatabaseId 作為邏輯代碼來存取資料庫,取代傳統 Connection String 的方式。
傳統做法把 Connection String 放在程式或設定檔,容易遇到:
log_2025
、log_2026
)或歷史庫時更複雜。DatabaseId | 用途說明 |
---|---|
common |
共用資料庫 |
log |
記錄與稽核資料庫(單一庫) |
log_2025 |
記錄與稽核資料庫(依年份切割,例如 log_2025 、log_2026 …) |
company |
公司資料庫(多家公司時可為 company01 、company02 …) |
history |
歷史資料庫 / 封存資料庫 |
所有連線定義集中在 DatabaseSettings.xml:由 DatabaseId
對應到實體資料庫設定。
建議使用 BeeSettingsEditor 維護此檔案,可將 Password
自動加密。DbName
、UserID
、Password
支援變數,實際連線前以屬性值取代。
載入行為:
DatabaseSettings.xml
會被反序列化為DatabaseSettings
物件並快取。長時間未使用或來源檔變更時,快取會釋放並重新載入。
範例設定:
<DatabaseItem Id="common"
DisplayName="Common Database"
DatabaseType="SQLServer"
ConnectionString="Data Source=.; Initial Catalog={@DbName}; Persist Security Info=True; User ID={@UserID}; Password={@Password}; TrustServerCertificate=True"
DbName="MyDb"
UserId="sa"
Password="enc:EAAAALOGDAAKhytCWFXqz...">
</DatabaseItem>
// 設定定義路徑,即 DatabaseSettings.xml 所在目錄
BackendInfo.DefinePath = @"D:\DefinePath";
// 初始化金鑰,以解密 DatabaseSettings.xml 中的加密資料
var settings = CacheFunc.GetSystemSettings();
settings.BackendConfiguration.InitializeSecurityKeys();
// 若有引用 Bee.Business 組件,可改用:
// settings.Initialize();
// 註冊資料庫提供者
DbProviderManager.RegisterProvider(DatabaseType.SQLServer, Microsoft.Data.SqlClient.SqlClientFactory.Instance);
方式一:建立 DbAccess 物件
var databaseItem = CacheFunc.GetDatabaseItem("common");
var dbAccess = new DbAccess(databaseItem);
dbAccess.ExecuteNonQuery("DELETE FROM Users WHERE Id = 1");
方式二:使用 SysDb(推薦)
SysDb.ExecuteNonQuery("common", "DELETE FROM Users WHERE Id = 1");
功能 | 方法名稱 | 範例程式碼 |
---|---|---|
查詢 DataTable | ExecuteDataTable | var dt = SysDb.ExecuteDataTable("common", "SELECT * FROM Users"); |
執行增刪改 | ExecuteNonQuery | int n = SysDb.ExecuteNonQuery("common", "DELETE FROM Users WHERE Id = 1"); |
取得單一值 | ExecuteScalar | int total = (int)SysDb.ExecuteScalar("common", "SELECT COUNT(*) FROM Users"); |
逐筆讀取 | ExecuteReader | var r = SysDb.ExecuteReader("common", "SELECT * FROM Users"); |
映射成強型別集合 | Query | var list = SysDb.Query<User>("common", "SELECT Id, Name FROM Users"); |
批次更新 DataTable | UpdateDataTable | SysDb.UpdateDataTable("common", dt, insertCmd, updateCmd, deleteCmd); |
測試連線 | TestConnection | bool ok = SysDb.TestConnection("common"); |
用 DatabaseId 取代 Connection String,把「連線細節」從應用程式抽離到設定檔,帶來:
🔐 更高安全:密碼加密、不再在程式或設定檔明碼暴露。
🔄 更好維運:切換資料庫或變更密碼只改設定檔。
🧩 更適企業級:天生支援多公司、多年度、歷史/封存等複雜場景。
透過 DatabaseId 抽象化設計,程式可以專注在商業邏輯,資料庫連線與管理則交由設定檔與框架處理,這就是 BeeNET 的一貫設計哲學。
📘 HackMD 原文筆記:
👉 https://hackmd.io/@jeff377/databaseid-access
📢 歡迎轉載,請註明出處
📬 歡迎追蹤我的技術筆記與實戰經驗分享
Facebook | HackMD | GitHub | NuGet