DataSet 可以包含非关联表,也可以包含关联表。你可以把 DataSet 想象成一个文档数据。事实上,除了 DataSet 是基于层级模型的,其它和 XML 数据文档是一样的。由于数据通常存储在关系数据库,DataSet 可以同时处理层级型关系和主键/外键型关系。 Relationships 也有不同的执行方式。默认情况下,Deletes 和 Updates 是级联型的:假如删除一个 Customer 行,关联的 Orders 行也会被删除;假如更改一个 Customer  行的主键,关联的 Orders 表中的外键也会更改。
 
DataSet 包含一个 Relations 集合。你可以利用关联表的 Column 或者 Columns(复合列键) 添加 Relation 到这个 Relations 集合。下面的代码在 Customers 和 Orders 之间创建一个 Relation,并命名为 CustOrders。
 
示例一:
 
            // 使用父子列创建 Relation
DataRelation myDataRelation = myDataSet.Relations.Add("CustOrders", myDataSet.Tables["Customers"].Columns["CustomerID"],
myDataSet.Tables["Orders"].Columns["CustomerID"]);
在 DataSet 内部的 Customers 表上的 CustomerID 主键和 Orders 表上的 CustomerID 外键之间添加了 Relation 之后,你就可以遍历关联数据了。
 
示例二:
 
            SqlConnection myConnection = new SqlConnection("server=(local);Integrated Security=SSPI;database=northwind;");
SqlDataAdapter myDataAdapter = new SqlDataAdapter(); DataSet myDataSet = new DataSet(); myDataAdapter.SelectCommand = new SqlCommand("SELECT * FROM Customers", myConnection);
myDataAdapter.Fill(myDataSet, "Customers"); myDataAdapter.SelectCommand = new SqlCommand("SELECT * FROM Orders", myConnection);
myDataAdapter.Fill(myDataSet, "Orders"); // 使用父子列创建 Relation
DataRelation myDataRelation = myDataSet.Relations.Add("CustOrders", myDataSet.Tables["Customers"].Columns["CustomerID"],
myDataSet.Tables["Orders"].Columns["CustomerID"]); // 迭代 Customers 父行
foreach (DataRow myDataRow1 in myDataSet.Tables["Customers"].Rows)
{
Console.WriteLine("客户: " + myDataRow1["ContactName"].ToString()); // 迭代 Customers 行的 Orders 子行
foreach (DataRow myDataRow2 in myDataRow1.GetChildRows(myDataRelation))
{
Console.WriteLine("订单号:" + myDataRow2["OrderID"].ToString());
}
}
原文链接:

ADO.NET 快速入门(九):使用关系型数据的更多相关文章

  1. HealthKit开发快速入门教程之HealthKit数据的操作

    HealthKit开发快速入门教程之HealthKit数据的操作 数据的表示 在HealthKit中,数据是最核心的元素.通过分析数据,人们可以看到相关的健康信息.例如,通过统计步数数据,人们可以知道 ...

  2. php随笔4-thinkphp 学习-ThinkPHP3.1快速入门(2)数据CURD

    ThinkPHP3.1快速入门(2)数据CURD   浏览:194739 发布日期:2012/09/05 分类:文档教程 关键字: 快速入门 CURD 上一篇中,我们了解了ThinkPHP的基础部分, ...

  3. ADO.NET 快速入门(十四):使用 SQL Server 检索数据

    SqlDataReader 类提供了一种从数据源读取数据记录只进流的方法.如果想使用 OLE DB 接口的数据库或者 SQL Server7.0 之前的版本,请参考文章:使用 OLE DB 检索数据. ...

  4. ADO.NET 快速入门(十三):使用 OLE DB 检索数据

    OleDbDataReader 类提供了一种从数据源读取数据记录只进流的方法.如果想使用 SQL Server 7.0 或者更高版本,请参考文章:使用 SQL Server 检索数据.   OleDb ...

  5. AngularJS快速入门指南14:数据验证

    thead>tr>th, table.reference>tbody>tr>th, table.reference>tfoot>tr>th, table ...

  6. ADO.NET 快速入门(一):ADO.NET 概述

    ADO.NET 概述 ADO.NET是改进的ADO数据访问模型用于开发可扩展应用程序.他是专门为可伸缩性.无状态和XML核心的web而设计的.   ADO.NET使用一些ADO对象,如Connecti ...

  7. ADO.NET 快速入门(四):从数据库填充 DataSet

    从数据库获取数据很容易,处理数据更容易.如果想要从数据库获取只进.只读的数据流结果集,你可以使用 DataReader 执行命令并且检索它.关于如何使用 DataReader,请参考:使用 OLE D ...

  8. ADO.NET 快速入门(十二):从 SQL Server 生成 XML 数据

    本文演示如何使用2种不同的方法从 SQL Server 生成 XML.   方法1:使用了 SqlCommand 的 ExecuteXmlReader 方法获取 XmlReader,然后使用 Data ...

  9. ADO.NET 快速入门(十):过滤数据

    我们有很多方法来过滤数据.一种是在数据库命令级别,利用 where 子句查询过滤数据.另一种是在数据填充到 DataSet 以后过滤数据.本篇讨论后者.   一旦数据填充到 DataSet,你可以使用 ...

随机推荐

  1. I.MX6 bq27441 driver porting

    /************************************************************************** * I.MX6 bq27441 driver p ...

  2. erlang reduction

    “首先明确一点,Erlang的process的调度是抢占式的,而非couroutine的协作式的.其次,Erlang早期版本是只有一个调度器,运行在一个线程上,随着erts的发展,现在erlang的调 ...

  3. windows下MySql没有setup.exe时的安装方法

    01.把 mysql-advanced-5.6.17-winx64.zip 解压到自定义 D:\mysql-5.6.17-W64 或 D:\mysql-advanced-5.6.17-winx64 目 ...

  4. 云计算服务模型,第 2 部分: 平台即服务(PaaS)

    英文原文:Cloud computing service models, Part 2: Platform as a Service 平台即服务 (PaaS) 常常是最容易让人迷惑的云计算类别,因为很 ...

  5. again

    建立一个IPC连接: net use \\192.168.0.5\ipc$ "123456" /u:administrator

  6. 为cocos2d-x项目增加Lua支持

    开始为游戏增加Lua脚本支持,今天主要配置了一下开发环境:cocos2d-x 2.2.1,xcode5. 1. 创建cocos2d-x-lua项目 类似于创建C++项目,用以下命令即可: python ...

  7. document.getElementsByClassName方法的重写(OVERRIDE)

    众所周知,对于IE8以下的浏览器(IE8居然是WIN7预装的)没有document.getElementsByClassName,网上也有很多重写的方法,以下是本人在项目中所使用的方法 documen ...

  8. document.write("\x3c\x54")?是加密了吗?

    <script>document.writeln("\x3C\x73\x63\x72\x69\x70\x74\x20\x73\x72\x63\x3D\x22\x48\x54\x5 ...

  9. C++ 我想这样用(三)

    话接前篇,继续谈在C++环境下使用C风格编程时的注意点: 6.关于原型的声明 在C里,调用一个未声明的函数是允许的,但是在C++里,必须先声明才能调用函数.另外,如果函数的参数是空的,那么在c里面是未 ...

  10. fedora 安装python mysql

    如果你服务器环境允许yum,安装MySQL-python模块就很简单了. 如果直接安装不行,先 安装MySQL-devel后正常运行 yum install mysql-devel yum insta ...