SqlMessageProvider 是提供者模式中最常見的實作,針對 SQL Server 資料庫進行資料操作。其結構與 XML 提供者高度相似,僅資料存取邏輯不同。
幾乎與 XMLMessageProvider 相同,差異僅在預設描述文字:
if (string.IsNullOrEmpty(config["description"])) {
config.Remove("description");
config.Add("description", "SqlServer操作Message");
}
連線字串解析流程完全一致,透過 connectionStringName 從配置檔取得資料庫連線字串。
public override bool Insert(MessageModel mm) {
// 實際應使用 ADO.NET 或 ORM 執行 INSERT T-SQL
// 範例:using (var conn = new SqlConnection(_connectionString)) { ... }
return true;
}
public override List<MessageModel> Get() {
var list = new List<MessageModel>();
// 實際應執行 SELECT 查詢並映射為 MessageModel 列表
list.Add(new MessageModel($"SQL方式,連接字串為 {_connectionString}", DateTime.Now));
return list;
}
SqlParameter。using 區塊確保連線釋放。SqlTransaction 中。async/await 與 ExecuteReaderAsync。| 特性 | SqlMessageProvider | XMLMessageProvider |
|---|---|---|
| 資料結構 | 關聯式表格 | 階層式 XML |
| 查詢語言 | T-SQL | XPath/LINQ to XML |
| 併發控制 | 資料庫鎖/交易 | 檔案鎖/手動實作 |
| 適合場景 | 企業級應用、高併發 | 小型資料、配置檔、離線場景 |
透過統一介面 MessageProvider,上層 Message 類別完全不需知道底層儲存細節,完美體現「面向介面程式設計」與「依賴倒置原則」。