Vs2010+VB+SQL2008 DataSet

来源:互联网 发布:网络兼职信息网 编辑:程序博客网 时间:2024/05/20 20:22

1、创建DataSet

可以通过调用 DataSet 构造函数来创建 DataSet 的实例。请指定一个可选名称参数。如果没有为DataSet 指定名称,则该名称会设置为“NewDataSet”。

以下代码示例演示如何构造 DataSet 的实例。

DataSet custDS = new DataSet("CustomerOrders")

2、向DataSet添加DataTable

ADO.NET 使您能够创建 DataTable 对象并将其添加到现有 DataSet 中。可以使用要添加到DataTableColumns 集合中的 DataColumn 对象的PrimaryKeyUnique 属性来设置 DataTable 的约束信息。

以下示例构造一个 DataSet,将一个新的 DataTable 对象添加到该 DataSet 中,然后将三个 DataColumn 对象添加到该表中。最后,该代码将一个列设置为主键列。

DataSet custDS = new DataSet("CustomerOrders");

DataTable ordersTable = custDS.Tables.Add("Orders");

DataColumn pkCol = ordersTable.Columns.Add("OrderID", typeof(Int32));
ordersTable.Columns.Add("OrderQuantity", typeof(Int32));
ordersTable.Columns.Add("CompanyName", typeof(string));

ordersTable.PrimaryKey = new DataColumn[] {pkCol};

区分大小写

按名称引用 DataSet 中的表和关系是区分大小写的。一个 DataSet 中可以存在两个或更多个名称相同但大小写不同的表或关系。例如,可以有Table1table1。在这种情况下,对其中一个表的按名称引用必须精确匹配该表名称的大小写,否则会引发异常。例如,如果DataSet myDS 包含表 Table1table1,则会按名称将Table1 当作 myDS.Tables["Table1"] 来引用,而将 table1 当作 myDS.Tables ["table1"] 来引用。如果试图将其中任一个表当作 myDS.Tables ["TABLE1"] 来引用,则会生成异常。

如果只存在一个具有特定名称的表或关系,则区分大小写规则不适用。也就是说,如果 DataSet 中没有其他任何表或关系对象匹配该特定表或关系对象的名称,那么即使大小写不同,仍可以按采用任何大小写的名称来引用该对象,而不会引发异常。例如,如果DataSet 只包含 Table1,则可以使用 myDS.Tables["TABLE1"] 来引用它。

DataSetCaseSensitive 属性不影响此行为。CaseSensitive 属性会应用于DataSet 中的数据,它将影响排序、搜索、筛选、约束强制等。CaseSensitive 属性不会影响对DataSet 中表或关系的引用。

3、添加表间关系

在包含多个 DataTable 对象的 DataSet 中,可以使用 DataRelation 对象来使一个表与另一个表相关,在多个表之间导航,以及从相关表中返回子行或父行。

创建 DataRelation 所需的参数是所创建的 DataRelation 的名称以及对用作关系中父列和子列的那些列的一个或多个DataColumn 引用的数组。当创建 DataRelation 后,可以使用它在多个表之间导航和检索值。

默认情况下,向 DataSet 中添加 DataRelation 会将一个 UniqueConstraint 添加到父表中并将一个 ForeignKeyConstraint 添加到子表中。有关这些默认约束的更多信息,请参阅将约束添加到表。

以下代码示例使用 DataSet 中的两个 DataTable 对象来创建一个 DataRelation。每个 DataTable 包含一个名为 CustID 的列,它用作两个DataTable 对象之间的链接。该示例将单个 DataRelation 添加到 DataSetRelations 集合中。该示例中的第一个参数指定所创建的 DataRelation 的名称。第二个参数设置父DataColumn,第三个参数设置子 DataColumn

custDS.Relations.Add("CustOrders",custDS.Tables["Customers"].Columns["CustID"],custDS.Tables["Orders"].Columns["CustID"]);

DataRelation 也具有 Nested 属性,如果该属性设置为 true,则来自子表的行会在使用 WriteXml 写为 XML 元素时嵌套在来自父表的关联行中。有关更多信息,请参阅XML 和 DataSet。