輕鬆玩轉 Typed DataSet, Part IV Written by: Rickie Lee
Dec. 11, 2004
本文繼續前面的 Typed DataSet 系列文章(輕鬆玩轉 Typed DataSet, Part 1-3 ),這裡闡述 Typed DataSet 相關文件及其作用和 Typed DataSet 在多層企業級系統中的應用等等。
1. Typed DataSet 相關文件及其作用
按照《
輕鬆玩轉 Typed DataSet, Part I 》中所提及的 使用 Visual Studio .NET 從 XSD 架構文件創建有類型的 DataSet , 一個典型的 Typed DataSet 包含如下 3 個文件,通過點擊右邊 Solution Explorer 上的 Show all files 可以看到:
( 1 ) XSD
XSD 文件存放定義 typed DataSet Schema 的 XML 內容,可以通過 Annotation
來定製 typed DataSet ,更詳細信息請參考《 輕鬆玩轉 Typed DataSet, Part II 》。
( 2 ) Class file (如 CS )
Class 文件創建 typed DataSet ,一般由 VS.Net 或 xsd.exe 命令行工具自動生成,包括繼承 DataSet 的 Typed DataSet Class 信息。該 class 文件實際上包括一系列繼承並擴展
DataSet, DataRow 和 EventArgs 的 classes ,因為上述繼承關係, Typed DataSet 仍然保留有 untyped DataSet 的所有特性,並沒有丟失任何特性。
如在引用 Typed DataSet 中 DataTable 對象時,你既可以使用 Tables 集合對象,也可以直接引用對應的屬性 Property ,代碼如下所示:
AnnotationTypedDataset.Orders
AnnotationTypedDataset.Tables[「Orders」]
( 3 ) XSX
XSX ( XML Schema Extended )文件由 XML Schema Designer 自動生成,包含 Designer 界面上布局或可視化信息。
2. Typed DataSet 在多層企業級系統中的應用
當在多層的企業級應用系統中採用 Typed DataSet 時,通常要求 Typed DataSet 在全部或多數 tiers 中可以使用。因此,一般情況下將 Typed DataSet 及其相關文件存放最低的層次,這樣其他引用該層的項目和 assemblies 就可以引用 Typed DataSet
對象了。
Typed DataSet 的用法示例:
(1) 定位 Typed DataSet 中的 OrderDetailsRow 數據行
OrdersDataSet.OrderDetailsRow oRow;
oRow = oDs.OrderDetails.FindByOrderIDProductID(
nOrderID_OrderDetail, nProductID_Original);
(2) 檢測是否列 Column 中包含 null 值
if(!oDs.Orders[0].IsOrderDateNull())
{
oDs.Orders[0].SetOrderDateNull();
}
(3) 循環 Orders 所有數據行及其關聯的 Order Details 記錄
foreach(OrdersDataSet.OrdersRow oOrderRow in oDs.Orders)
{
Debug.WriteLine("OrderID = " + oOrderRow.OrderID);
foreach(OrdersDataSet.OrderDetailsRow oOrderDetailRow in
oOrderRow.GetOrderDetailsRows())
{
Debug.WriteLine(" — " + oOrderDetailRow.ProductName);
}
}
需要注意的是:如果後台的 Database structure 發生變化,則需要同步 Typed DataSet 的 Schema 信息。在這樣情況下,即使採用 Untyped DataSet ,你也需要改變一些 Client 端代碼。但使用 Typed DataSet 的好處是,編譯器能夠標識出用戶代碼中大部分需要修改的地方,因為編譯器能夠對 Typed DataSet 在編譯期間進行類型安全檢查,而 untyped DataSet 則只能在 runtime 期間發現錯誤並拋出異常。
References:
1. Rickie, 輕鬆玩轉 Typed DataSet, Part I
2. Rickie, 輕鬆玩轉 Typed DataSet, Part II
3. Rickie, 輕鬆玩轉 Typed DataSet, Part III
4. John Papa, Efficient Coding With Strongly Typed DataSets,
http://msdn.microsoft.com/msdnmag/issues/04/12/DataPoints/default.aspx