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();

}
     }
}

转载于:https://www.cnblogs.com/candl/p/4142519.html

DataSet中的relation相关推荐

  1. 【原创】数据库中时间字段的值读取到DataSet中后,毫秒部分丢失。

    数据库中时间字段的值读取到DataSet中后,毫秒部分丢失. 在网上查了些解决方案,说读取时间时,先转化为DateTime类型,然后在ToString("yyyy-MM-dd HH:mm:s ...

  2. 对于DataSet中的问题真是郁闷啊

    我将一个DataSet放到一个Session中,将Session中的一个表绑定到一个DataGrid中,在DataGrid中我加入了模板列. DataSet表的示例: 字段1 字段2 字段3 删除标记 ...

  3. 数据库-ADONET-在数据集DataSet中使用关系对象DataRelation处理关系

    处理关系数据 数据库中,表很少是独立结构的,大部分数据库都包含相互关联的表. 在构建应用程序时,会遇到--显示或者通过程序设计访问数据库中相关表的数据的情况. 用户会希望,能通过在不同的表之间定位,来 ...

  4. 获得 DataSet中的记录总数

      查看文章     获得 DataSet中的记录总数 2009-08-05 15:00 获得 2009-08-05 15:00 获得 DataSet中的记录总数 DataSet ds = new D ...

  5. dataset中的数据批量导入oracle数据库,c#如何将dataset中的数据批量导入oracle数据库...

    c#如何将dataset中的数据批量导入oracle数据库以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c#如何将da ...

  6. C# 读取Excel CSV 类型文件到DataSet中,反之从DataSet写入excel

    /// <summary> /// 设置文件保存位置, /// </summary> /// <returns>返回文件路径</returns> pri ...

  7. 将勾选数据从dataset中筛选出来

    为什么80%的码农都做不了架构师?>>>    方案一: DataSet dsTemp = new DataSet();dsTemp = dsDt.Clone();DataRow[] ...

  8. tensorflow eager 模式下打印dataset中的数据

    tensorflow eager 模式下打印dataset中以及经过feature column后的数据 由于调试的需求,需要对比dataset中的原始数据和经过feature_column后的数据, ...

  9. 将多个DataTable添加到指定的DataSet中

    将多个DataTable添加到指定的DataSet中 如何将多个DataTable添加到指定的DataSet中 事件起因:从数据库中,查询多个dataTable,现在想一下子返回多个table,所以就 ...

最新文章

  1. kafka异步推送设置重试_一篇文章了解 Kafka 幂等性的原理及实践
  2. Linux crontab 命令格式
  3. unity模块切换_(一)Unity3D模块介绍
  4. C驱动程序是怎么跑起来的
  5. android 发送前台广播,使用IntentService与BroadcastReceiver实现后台服务(Android7.0可用)...
  6. mysql command line client 目标不对_简单几招提高MySQL安全性
  7. [C++ rudiment][转]typedef 使用
  8. ffmpeg 解码视频(h264、mpeg2)输出yuv420p文件
  9. WPF如何给窗口设置透明png的图片背景
  10. [VC++]最小化图标至托盘中
  11. [IOI2005]Riv 河流
  12. iptables 开放端口
  13. UCloud可支撑单可用区320,000服务器的数据中心网络系统设计
  14. Sort代码详解学习
  15. python 遗传算法书籍推荐_转 强烈推荐遗传算法入门例子
  16. 诚龙网刻PXE网刻出错解决
  17. 菜菜之路-C语言求阶乘和
  18. artDialog对话框组件使用方法
  19. Java8新特性之Joining
  20. 《HikariCP数据库连接池实战》学习笔记(二):获取连接原理

热门文章

  1. arduino char*转string_【201期】面试官:String长度有限制吗?是多少?还好我看过...
  2. tensorflow学习(5.实际图片的读取以及lenet-5的搭建)
  3. 笔记:Matrix completion by Truncated Nuclear Norm Regularization
  4. 有三AI知识星球官宣,BAT等大咖等你来撩
  5. 全球及中国本质安全校准器行业销售前景与竞争规模预测报告2022-2027年
  6. 全球及中国水彩调色板行业销售前景与投资商机研究报告2022版
  7. 全球及中国天然气终端销售市场产量预测及发展策略分析报告2021年版
  8. SpringMVC之context-dispatcher.xml,了解基本的控制器
  9. jmeter设置全局变量
  10. API(Application Programming Interface,应用程序编程接口)