背景:Web 應用程式的資料交換挑戰
企業開發重心從傳統 Client/Server 轉向 Web 應用,資料交換改用 XML 與公共網際網路。Web 應用需從 SQL Server 取得 XML 查詢結果,並以 XML 格式更新資料庫。SQL Server 2000、SQLXML 與 .NET Framework 提供多種技術支援,但資料庫更新始終是難點。
Web 應用資料更新的三大隱性需求
- 開放式更新:網路連線非同步、短暫且不可靠,需避免長時間鎖定導致效能下降。
- 客戶端不預知資料庫結構:封裝資料庫細節。
- 傳送變更與並發資訊:解決多客戶端競爭更新問題。
Updategram 分析
Updategram 是描述 XML 查詢結果變更的 XML 文件,配合 SQLXML Web 版本可執行開放式更新,支援階層關聯資料表更新(如訂單與明細)。
四大缺陷限制廣泛應用
- 缺乏物件模型支援:ADO、DOM、SQLXML 均不支援產生或解析 Updategram,需自行實作客戶端程式碼,且難以重用;業務邏輯驗證、並發檢查需額外開發物件模型。
- 無法呼叫預存程序:封裝在預存程序的業務規則、約束與參考完整性失效。
- XML 表達排除關聯資料:驗證變更或執行業務邏輯時可能缺少必要資料。
- 中間層處理效能損耗:SQLXML 在中間層解析 Updategram 產生 SQL 陳述句,而非由 SQL Server 直接處理,失去批次處理優勢。
Diffgram 分析
Diffgram 隨 ADO.NET 引入 .NET Framework,解決部分 Updategram 痛點。
核心優勢
- DataSet 物件模型支援:可直接序列化/反序列化 DataSet,無需手寫 Diffgram 產生與解析程式碼;搭配 DataAdapter 可透過預存程序更新,並支援並發事件處理。
使用限制
- .NET Framework 部署需求:客戶端或中間層需安裝 .NET Framework。
- 不支援識別欄位資料表更新:若主鍵為 IDENTITY 欄位並作為外鍵(如訂單號),Diffgram 無法處理明細新增。
- 複雜類型命名衝突:不同 XSD 中同名異構類型(如 Vendor 同時指 ServiceProvider 與 ProductReseller)會導致解析困難。
SQLXML 對 Diffgram 的支援
SQLXML 2.0/3.0 可透過 ADO XML 方言或虛擬目錄處理 Diffgram,使用 XSD 對應結構描述映射至資料庫,但仍須面對上述架構限制。
選型建議
僅當資料庫無 IDENTITY 外鍵參考,且能控制客戶端 XML 結構描述時,優先採用 Diffgram;否則需評估自行實作更新邏輯或混合方案。