首页 > DataSet中的relation

DataSet中的relation

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

更多相关:

  • 点击“蓝字”关注点云PCL,选择“星标”获取最新文章Open3D-ML是Open3D的一个扩展,用于3D机器学习任务。它建立在Open3D核心库之上,并通过机器学习工具对其进行扩展,以进行3D数据处理。此repo集中于语义点云分割等应用程序,并提供可应用于常见任务的预训练模型以及用于训练的流程。Open3D-ML与TensorFlo...

  • 一、资料 参考原文: TensorFlow全新的数据读取方式:Dataset API入门教程 API接口简介: TensorFlow的数据集   二、背景 注意,在TensorFlow 1.3中,Dataset API是放在contrib包中的: tf.contrib.data 而在TensorFlow 1.4中,Dataset AP...

  • UML中描述对象和类之间相互关系的方式包括:依赖(Dependency),关联(Association),聚合(Aggregation),组合(Composition),泛化(Generalization),实现(Realization)等。 依赖(Dependency):元素A的变化会影响元素B,但反之不成立,那么B和A的...

  • 目录 整理最近学习 visual-reasoning的笔记 1. 关注 ACL、EMNLP、NAACLI等会议文章 未开始 2. Cyc项目 2.1 cyc知识库介绍: ​ 该知识库包含了320w条人类断言,30w概念,15000谓词。 ​ Cyc知识库中表示的知识一般形如“每棵树都是植物”、“植物最终都会死亡”。当提出“树...

  •         通过不断的学习并绘制UML图,整个画图的过程中深刻体会到其核心部分还是理解事物之间的关系,总结六大关系来深入学习,主要关系有六种:继承、实现、依赖、关联、聚合、组合。 区别于联系:         1.继承(泛华)关系(Generalization)         继承关系是一个类(称为子类、子接口)继承...

  • 这个是cdn配置缓存策略的文件,可以改变指定对象或是对象集的缓存参数cacheing paremeters 该文件默认存放在/usr/local/etc/trafficserver/,它定义了Traffic Server如何缓存web objects。 你能添加caching rules来指定如下东西: 不缓存来自某个IP add...

  • 文章目录基本概念普通的分位数计算Rocksdb中的应用rocksdb中的分桶算法结果展示rocksdb 分桶算法实现一些总结 和 相关论文...

  • 罗德里希·普塔克 — 德国汉学家 海上丝路连结了古代世界贸易往来,见证了中华文明在人类历史中的枢纽位置。 王权集中的朝代中每一个流传后世的国家层级的决策无不彰显国家机器得强壮,但同样也很脆弱,决策者不可能时刻都能做出最为正确得选择。...

  • 原文:http://www.2008sc.cn/blog/article.asp?id=82 1、JavaScript 中的内存泄露模式http://www.ibm.com/developerworks/cn/web/wa-memleak/index.html----------------------2、javascript中的 闭...