DataSet 常因「XML 序列化跨平台困難」與「弱型別容器」被詬病,但若理解其優勢並規避缺點,它能解決多數常規資料問題,開發效率遠超手寫集合。
AcceptChanges/RejectChanges 事務支援、DiffGram 追蹤變更;DataView 篩選排序、跨表導覽。需求:支援資料繫結、事務(Esc 取消編輯)、欄位驗證(州碼兩字母)、錯誤提示、排序搜尋。
空集合時反射無法取得型別資訊,需實作 GetItemProperties 回傳 PropertyDescriptorCollection。
需自行管理永久/暫存資料雙緩衝、編輯狀態旗標、錯誤集合、BeginEdit/EndEdit/CancelEdit 邏輯,代碼量極大。
支援排序、搜尋、新增/刪除通知等,實作極其繁瑣。
若屬性回傳參考類型,內部交換實例不會更新外部持有的舊參考(同原則 45 陷阱)。DataSet 以 Merge 原地更新解決此問題。
VS 設計師可從資料庫結構生成繼承 DataSet 的強型別類別,提供:
myDataSet.Orders[0].CustomerID;除非極少數「演算法導向、極致效能、輕量格式」場景,否則請使用(強型別)DataSet。它雖非 OO 純粹典範,但以極少代碼換取完整功能集,是務實的最佳選擇。