DataSet中的relation

DataSet是ADO.Net中相当重要的数据访问模型。有一个很大的优点是可以记录多个表之间的关系。有点类似与数据库的外键。

在DataSet中也可以定义类似的关系。DataSet有一个属性Relation,是DataRelation对象的集合,要创建新的关系,可以使用Relation的Add()方法。下面以NorthWind为例,说明这个过程:

using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.SqlClient;

namespace DataSetRelationStudy
{
     class Program
     {
         static void Main(string[] args)
         {
             SqlConnection conn = new SqlConnection(@"Data Source=(local);Initial Catalog=Northwind;Integrated Security=True");

//生成一个DataSet用来接受从数据库来的表,DataSet本身可以看做一个“内存中的数据库”
             DataSet myDs = new DataSet();

//用两个数据适配器访问数据库
             SqlDataAdapter custAdapter = new SqlDataAdapter("SELECT * FROM Customers", conn);
             SqlDataAdapter orderAdapter = new SqlDataAdapter("SELECT * FROM Orders", conn);

//将取得的数据存入DataSet中两个表
             custAdapter.Fill(myDs, "Customers");
             orderAdapter.Fill(myDs, "Orders");

//在Customers表和Orders之间定义关系,实现“一对多”关系
             //其中Customers 是 父表,是一对多中的“一”
             //Orders 是子表,是一对多中的 “多”
             //关系定义的方法是 DataRelation 变量名 = “DataSet对象”.Relations.Add("关系名",DataSet对象.主表.列名 , DataSet对象.子表.列名);
             //这样便在两张表之间建立了一对多关系,相当于“外键”
             //利用关系可以方便的在两表之间导航
            DataRelation custOrderRelation = myDs.Relations.Add("CustOrders",
                 myDs.Tables["Customers"].Columns["CustomerID"], myDs.Tables["Orders"].Columns["CustomerID"]);

foreach (DataRow custRow in myDs.Tables["Customers"].Rows)//利用关系来查找Customers表中每个人的订单
             {
                 Console.WriteLine(" Custeomer ID: "+custRow["CustomerID"]+" Name: "+custRow["CompanyName"]);

//下面是关键,主表中的行可以用 行.GetChildRows(关系变量) 来取得子表中的相关行
                 //可以用 行.GetChildRows("关系名称") 调用,名称是存在DataSet的Relations属性中的名字
                 //返回的是一个DataRow的集合,可以遍历这个集合来取得所有的子项
                 //foreach(DataRow orderRow in custRow.GetChildRows(custOrderRelation))
                foreach(DataRow orderRow in custRow.GetChildRows("CustOrders"))
                 {
                     Console.WriteLine(" Order ID: "+orderRow["OrderID"]);
                 }
             }

conn.Close();
             Console.Read();

}
     }
}

DataSet中的relation的更多相关文章

  1. C#中DataSet中的relation

    //关系定义的方法是 DataRelation 变量名 = “DataSet对象”.Relations.Add("关系名",DataSet对象.主表.列名 , DataSet对象. ...

  2. C# 导入Excel到DataSet中

    class Import { /// <summary> /// 导入Excel到DataSet中 /// </summary> /// <param name=&quo ...

  3. 使用OpenXml把Excel中的数据导出到DataSet中

    public class OpenXmlHelper { /// <summary> /// 读取Excel数据到DataSet中,默认读取所有Sheet中的数据 /// </sum ...

  4. DataSet 中的数据排序 及 DataRow装成DataTable

    1.DataSet 中的数据排序 DataSet ds = new DataSet(); // 获取当前排口的数据 ds = _xiaobill.GetHistoryData(yinZiBianm, ...

  5. DataSet中取值(转)

    1 DataSet.Table[0].Rows[ i ][ j ] 其中i 代表第 i 行数, j 代表第 j 列数 2 DataSet.Table[0].Rows[ i ].ItemArray[ j ...

  6. 在DATASET中要是想添加进另一个表怎么办?

    问:sql="select * from banzhu_manage ";adapter=new SqlDataAdapter(sql,banzhu_conn);adapter.F ...

  7. C# 手动编写 DataSet,DataTable 及遍历DataSet中的数据

    一.手动编写DataSet:    有时候不想从数据库导出 DataSet,或者有其他的需要,要将数据库里的DataSet包装成另一个样子,这个时候,了解DataSet的内部结构就非常必要.DataS ...

  8. 导入本地Excel到DataSet中

    /// <summary> /// 导入本地Excel到DataSet中 /// </summary> /// <param name="strFileSour ...

  9. 哈希算法和字典类的定义,DataSet中数据遍历的几种方法

    哈希算法的基本操作: 1.  哈希表(HashTable)简述   在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似 ...

随机推荐

  1. JMeter简介

    #Jmeter简介JMeter是一个100%纯Java桌面应用,它是Apache组织的开放源代码项目,它是功能和性能测试的工具.JMeter可以用于测试静态或者动态资源的性能.JMeter有以下特性: ...

  2. mysql学习笔记(sqlalchemy安装及简单使用)

    博主最近在研究接口API自动化测试,之前设计的通过excel来实现自动化测试的框架实际使用中还是有很多局限性 这次博主的思路是: 1 搭建接口API管理平台 支持数据库方便维护 2 自动化测试平台可直 ...

  3. nearly,about,almost的区别

    nearly 几乎,将近almost 几乎,差一点儿就,差不多(与动词,副词,形容词以及名词连用时,可与nearly通用;与no,none,nothing,never等否定式连用时,不可与nearly ...

  4. 慕课网-安卓工程师初养成-4-11 Java循环跳转语句之 break

    来源:http://www.imooc.com/code/1431 生活中,我们经常会因为某些原因中断既定的任务安排.如在参加 10000 米长跑时,才跑了 500 米就由于体力不支,需要退出比赛.在 ...

  5. 学习练习 java编写西游记人物类

    package com.hanqi; public class XiYouJiRenWu { double height; String weapon; String name; void prine ...

  6. JS产生四位随机数的方法

    <script>var charactors="1234567890"; var value='',i; for(j=1;j<=4;j++){ i = parse ...

  7. Android knock code analysis

    My colleague she forgot the knock code and ask me for help. I know her phone is LG G3 D855 with Andr ...

  8. 一步一步学习SignalR进行实时通信_1_简单介绍

    一步一步学习SignalR进行实时通信\_1_简单介绍 SignalR 一步一步学习SignalR进行实时通信_1_简单介绍 前言 SignalR介绍 支持的平台 相关说明 OWIN 结束语 参考文献 ...

  9. 《深入剖析Tomcat》读书笔记(一)

    一.Tomcat Tomcat,全名Apache Tomcat,最初是由Sun发起,后来捐赠给ASF,是Apache Jakarta下的一个子项目.Tomcat是对Servlet API定义的容器的一 ...

  10. POJ C程序设计进阶 编程题#3:寻找山顶

    编程题#3:寻找山顶 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个 ...