對這文章發表回應
發表限制: 非會員 可以發表
Written by: Rickie Lee
Dec. 07, 2004
Typed DataSet 與一般 DataSet 的簡單比較: 1. Typed DataSet 直接繼承 DataSet Class, 是一個特殊的 DataSet 類型 . 2. 通過 Typed DataSet ,可以方便直接地獲取 tables 和 filelds. 3. 每一個 DataTable 是 Typed DataSet 的一個屬性 . 4. 同樣地,每一個 Field 是Data Row 的一個屬性 . 5. 使用 Typed DataSet ,不僅語法簡潔,而且在編譯期間進行類型檢查。 關於 Typed DataSet 的優點與缺點,及其在分布式應用系統中作用,請參考《 分布式應用架構中的數據傳輸對象( DTO ) 》。
一、創建 Typed DataSet
這裡演示 從 XSD 架構文件創建有類型的 DataSet 的 過程。 要使用 Visual Studio .NET 從 XSD 架構文件創建有類型的 DataSet ,請執行以下步驟: 1. 在
Visual Studio .NET 中,創建一個新項目或打開一個現有項目。
2. 為項目添加一個現有的 XSD 架構,或在組件設計器中創建一個新的 XSD 架構。
從上圖可以發現, Typed DataSet 的後綴為 .xsd ,因為 Typed DataSet 的源文件是 XML Schema 文檔。 XSD 文件不僅包含 table 和 column 名稱,而且包含 keys, relationships
和 constraints 信息。
3. 使用Server Explorer打開相應的Database,然後通過拖拉tables到上述XSD文件。
下面以 Northwind Database 為例:
添加 Orders, Order Details 兩個表。 VS.Net IDE 不能自動檢測 Database 中表間關係,因此 Orders 和 Order Details 兩個表之間在 XSD 文件沒有自動產生任何關係。
4. 手工建立表與表之間的關係
從 Toolbox 中拖拉一個新的 Relation 到
XSD 編輯界面,並彈出如下 Edit Relation 的 windows form :
通過上述 Edit Relation 界面,可以編輯 relationship 參數。
另外,也可以通過 Toolbox 和 XSD 的編輯界面,增加 / 修改 table 中 column 元素。
注意:示例中將上面的 Order Details 元素改名為 OrderDetails ,去除其中的空格,以免一些不必要的麻煩。
在 Schema (架構)菜單中,單擊 Generate DataSet (生成 DataSet ) 或 Preview DataSet 。
為確認已創建該有類型的 DataSet ,可以在解決方案資源管理器中單擊 Show All Files (顯示所有文件)按鈕。 展開 XSD 架構文件的節點,確認存在一個與 XSD 架構相關聯的代碼文件。該代碼文件定義了新的有類型的 DataSet 類。
public class OrderDataSet : DataSet
…… Typed DataSet/OrderDataSet 直接繼承 DataSet Class.
二、使用 Typed DataSet
在使用上述 Typed DataSet 之前,先了解 OrderDataSet.XSD 文件內容。
如下是 Northwind Database 中 Orders table 的架構元素:
上述 XML Schema 會生成 OrdersRow 這一對象名稱
OrderDataSet.OrdersRow ,還有一個名為 Orders 的 DataRowCollection Class ( OrderDataSet.Orders )。
調用上述 Typed DataSet 的 Code snippet :
OrderDataSet theOrderDS = new OrderDataSet();
string strSelectOrders = "Select * From Orders ";
strSelectOrders += "Select * From [Order Details]";
SqlHelper.FillDataset(connStr, CommandType.Text, strSelectOrders, theOrderDS, new string[] {"Orders", "OrderDetails"});
StringBuilder strResults = new StringBuilder();
foreach(OrderDataSet.OrdersRow theOrder in theOrderDS.Orders)
{
strResults.Append(theOrder.OrderID.ToString() + " "
+ theOrder.CustomerID.ToString() + " "
+ theOrder.EmployeeID.ToString() + Environment.NewLine);
strResults.Append("Order Details: ");
strResults.Append(theOrder.GetChildRows("OrdertoOrderDetails").GetLength(0).ToString());
strResults.Append(Environment.NewLine);
}
txtResults.Text = strResults.ToString();
代碼比較簡單,上述代碼調用了 SqlHelper Class ( Microsoft Data Access Application Block )的 FillDataset 方法,來完成 DataSet 的填充。 FillDataSet 方法支持 Typed DataSet ,值得推薦使用。
Any questions or errors, please leave comments. Thanks.
. 4. 同樣地,每一個 Field 是 Data Row 的一個屬性 . 5. 使用 Typed DataSet,不僅語法簡潔,而且在編譯期間進行類型檢查。 關於 Typed DataSet 的優點與缺點,及其在分布式應用系統中作用,請參考《 分布式應用架構中的數據傳輸對象( DTO ) 》。
一、創建 Typed DataSet
這裡演示 從 XSD 架構文件創建有類型的 DataSet 的 過程。 要使用 Visual Studio .NET 從 XSD 架構文件創建有類型的 DataSet ,請執行以下步驟:1. 在 Visual Studio .NET 中,創建一個新項目或打開一個現有項目。
2. 為項目添加一個現有的
XSD 架構,或在組件設計器中創建一個新的 XSD 架構。
從上圖可以發現, Typed DataSet 的後綴為 .xsd ,因為 Typed DataSet 的源文件是 XML Schema 文檔。 XSD 文件不僅包含 table 和 column 名稱,而且包含 keys, relationships 和 constraints 信息。
3. 使用Server Explorer打開相應的Database,然後通過拖拉tables到上述XSD文件。
下面以 Northwind Database 為例:
添加 Orders, Order Details 兩個表。 VS.Net IDE 不能自動檢測 Database 中表間關係,因此 Orders 和 Order Details 兩個表之間在 XSD 文件沒有自動產生任何關係。
4. 手工建立表與表之間的關係
從 Toolbox 中拖拉一個新的 Relation 到 XSD 編輯界面,並彈出如下 Edit Relation 的 windows form :
通過上述 Edit Relation 界面,可以編輯 relationship 參數。
另外,也可以通過 Toolbox 和 XSD 的編輯界面,增加 / 修改 table 中 column 元素。
注意:示例中將上面的 Order Details 元素改名為 OrderDetails ,去除其中的空格,以免一些不必要的麻煩。
在 Schema (架構)菜單中,單擊 Generate DataSet (生成 DataSet ) 或 Preview DataSet 。
為確認已創建該有類型的 DataSet ,可以在解決方案資源管理器中單擊 Show All Files (顯示所有文件)按鈕。 展開 XSD 架構文件的節點,確認存在一個與 XSD 架構相關聯的代碼文件。該代碼文件定義了新的有類型的 DataSet 類。
public class OrderDataSet : DataSet
…… Typed DataSet/OrderDataSet 直接繼承 DataSet Class.
二、使用 Typed DataSet
在使用上述 Typed DataSet 之前,先了解 OrderDataSet.XSD 文件內容。
如下是 Northwind Database 中 Orders table 的架構元素:
上述 XML Schema 會生成 OrdersRow 這一對象名稱 OrderDataSet.OrdersRow ,還有一個名為 Orders 的 DataRowCollection Class (
OrderDataSet.Orders )。
調用上述 Typed DataSet 的 Code snippet :
OrderDataSet theOrderDS = new OrderDataSet();
string strSelectOrders = "Select * From Orders ";
strSelectOrders += "Select * From [Order Details]";
SqlHelper.FillDataset(connStr, CommandType.Text, strSelectOrders, theOrderDS, new string[] {"Orders", "OrderDetails"});
StringBuilder strResults = new StringBuilder();
foreach(OrderDataSet.OrdersRow theOrder in theOrderDS.Orders)
{
strResults.Append(theOrder.OrderID.ToString() + " "
+ theOrder.CustomerID.ToString() + " "
+ theOrder.EmployeeID.ToString() + Environment.NewLine);
strResults.Append("Order Details: ");
strResults.Append(theOrder.GetChildRows("OrdertoOrderDetails").GetLength(0).ToString());
strResults.Append(Environment.NewLine);
}
txtResults.Text = strResults.ToString();
代碼比較簡單,上述代碼調用了 SqlHelper Class ( Microsoft Data Access Application Block )的 FillDataset 方法,來完成 DataSet 的填充。 FillDataSet 方法支持 Typed DataSet ,值得推薦使用。
Any questions or errors, please leave comments. Thanks.