玩转Typed DataSet的简易指南,第一部分
通过上述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的架构元素:
<xs:element name="Orders">
<xs:complexType>
<xs:sequence>
<xs:element name="OrderID" msdata:ReadOnly="true" msdata:AutoIncrement="true" type="xs:int" />
<xs:element name="CustomerID" type="xs:string" minOccurs="0" />
<xs:element name="EmployeeID" type="xs:int" minOccurs="0" />
<xs:element name="OrderDate" type="xs:dateTime" minOccurs="0" />
<xs:element name="RequiredDate" type="xs:dateTime" minOccurs="0" />
<xs:element name="ShippedDate" type="xs:dateTime" minOccurs="0" />
<xs:element name="ShipVia" type="xs:int" minOccurs="0" />
<xs:element name="Freight" type="xs:decimal" minOccurs="0" />
<xs:element name="ShipName" type="xs:string" minOccurs="0" />
<xs:element name="ShipAddress" type="xs:string" minOccurs="0" />
<xs:element name="ShipCity" type="xs:string" minOccurs="0" />
<xs:element name="ShipRegion" type="xs:string" minOccurs="0" />
<xs:element name="ShipPostalCode" type="xs:string" minOccurs="0" />
<xs:element name="ShipCountry" type="xs:string" minOccurs="0" />
</xs:sequence>
</xs:complexType>
</xs:element>
上述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.