一、概念

DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。所谓独立,就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的,DataSet在内部是用XML来描述数据的,由于XML是一种与平台无关、与语言无关的数据描述语言,而且可以描述复杂关系的数据,比如父子关系的数据,所以DataSet实际上可以容纳具有复杂关系的数据,而且不再依赖于数据库链路。

因为DataSet可以看做是内存中的数据库,也因此可以说DataSet是数据表的集合,它可以包含任意多个数据表(DataTable),而且每一 DataSet中的数据表(DataTable)对应一个数据源中的数据表(Table)或是数据视图(View)。数据表实质是由行(DataRow)和 列(DataColumn)组成的集合为了保护内存中数据记录的正确性,避免并发访问时的读写冲突,DataSet对象中的DataTable负责维护每一条记录,分别保存记录的初始状态和当前状态。从这里可以看出DataSet是与只能存放单张数据表的Recordset是截然不同的概念。

二、特点

(1) 独立性。DataSet独立于各种数据源。

(2) 离线(断开)和连接。

(3) DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。

三、使用方法

在实际应用中,DataSet使用方法一般有三种:

(1) 把数据库中的数据通过DataAdapter对象填充DataSet。

(2) 通过DataAdapter对象操作DataSet实现更新数据库。

(3) 把XML数据流或文本加载到DataSet。

四、实例

private void toolStripMenuItem7_Click(object sender, EventArgs e)
{
using (SqlConnection sqlConnection = new SqlConnection(DBHelper.connString))
{ SqlCommand sqlCommand = new SqlCommand();
sqlCommand.Connection = sqlConnection;
sqlCommand.CommandText =
"SELECT * FROM tb_Client;"
+ "SELECT * FROM tb_chushou;"
+ "SELECT * FROM tb_medicine;";
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
sqlDataAdapter.SelectCommand = sqlCommand;
DataSet dataSet = new DataSet();
sqlConnection.Open();
sqlDataAdapter.Fill(dataSet);
sqlConnection.Close();
DataTable ClientTable = dataSet.Tables[];
DataTable chushouTable = dataSet.Tables[];
DataTable medicineTable = dataSet.Tables[];
DataRelation[] dataRelations =
{
new DataRelation
("Client_chushou"
, ClientTable.Columns["CNO"]
, chushouTable.Columns["CNO"]
, false)
, new DataRelation
("chushou_medicine"
, chushouTable.Columns["MNo"]
, medicineTable.Columns["MNo"]
, false)
};
dataSet.Relations.AddRange(dataRelations);
this.trv_Client.Nodes.Clear();
foreach (DataRow ClientRow in ClientTable.Rows)
{
TreeNode ClientNode = new TreeNode();
ClientNode.Text = ClientRow["CName"].ToString();
this.trv_Client.Nodes.Add(ClientNode);
foreach (DataRow chushouRow in ClientRow.GetChildRows("Client_chushou"))
{
//TreeNode chushouNode = new TreeNode(); ////chushouNode.Text = "";
//ClientNode.Nodes.Add(chushouNode);
foreach (DataRow MRow in chushouRow.GetChildRows("chushou_medicine"))
{
TreeNode MNode = new TreeNode();
MNode.Text = MRow["MName"].ToString();
MNode.Tag = MRow["MNo"];
ClientNode.Nodes.Add(MNode);
}
}
} }
}

ado.net DataSet的更多相关文章

  1. 将Json数据转换为ADO.NET DataSet对象

    Json数据转换为ADO.NET DataSet其实方法有很多,Newtonsoft.Json也提供了DataSet的Converter用以转换Json数据.但是有些情况下DataSet Conver ...

  2. ado:SqlDataAdapter,dataset 与SqlDataReader的用法一

    原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] using System;using System.Data;using System.Configuration ...

  3. C# ado.net DataSet使用(五)

    一.填充dataset class Program { private static string constr = "server=.;database=northwnd;integrat ...

  4. ADO.NET DataSet、DataTable、DataRow、DataView的学习

    对于一个datatable中的数据进行嵌套查询判断某几列数据是否相同从而确定这条数据是否一样,并确定他重复的次数COUNT1字段. 例如: DataTable dt = new DataTable() ...

  5. ADO.NET和ADO.NET Entity Framework

    ADO.NET 3.0 用于访问和操作数据的两个主要组件是 .NET Framework 数据提供程序和 DataSet. .NET Framework 数据提供程序 .NET Framework 数 ...

  6. ADO.NET 结构 集中数据库联接结构

    MSDN 原文出处 https://msdn.microsoft.com/zh-cn/library/27y4ybxw.aspx .NET Framework 4.6 and 4.5 其他版本 以前, ...

  7. ADO.NET 快速入门(十五):ADO 应用转换为 ADO.NET

    这是一个已经移植到 .NET 的 ADO 应用的例子.也演示了单向.只读.快速 DataReader 的使用.它演示如何使用 DataView 类从 DataSet 获取一个 Table 和 操作一个 ...

  8. C# 学习笔记02 ADO.net

    DataSet ado.net DataSet 的设计已明确指出它可独立于任何资料来源外而存取资料.因此,它可与多个不同的资料里来源搭配使用.与 XML 资料搭配使用,或用于管理应用程序的本机资料.D ...

  9. 模拟在内存中的数据库DataSet相关的类

    这篇连着上一篇DataReader相关类. 下面两段话是在msdn官网摘下来:       .NET Framework 数据提供程序是专门为数据操作以及快速.只进.只读访问数据而设计的组件.Conn ...

随机推荐

  1. 常见 Web 安全攻防总结

    Web 安全的对于 Web 从业人员来说是一个非常重要的课题,所以在这里总结一下 Web 相关的安全攻防知识,希望以后不要再踩雷,也希望对看到这篇文章的同学有所帮助.今天这边文章主要的内容就是分析几种 ...

  2. 37)PHP,获取数据库数据并在html中显示(晋级4)

    我的php文件和html文件的位置关系: 然后我的主php文件是b.php,我的那个配置文件是BBB.php,我的html文件是login.html 然后我的b.php代码展示: <?php c ...

  3. 2018SEERC Points and Rectangles (CDQ分治)

    题:http://codeforces.com/gym/101964/problem/K 分析:https://blog.csdn.net/qq_43202683/article/details/98 ...

  4. Sass入门指南

    转自:http://www.imooc.com/article/1413 css预处理器已经算不上一个新鲜的词了,当前比较有代表性的css预处理器有sass.less.stylus.关于三者选择问题一 ...

  5. 004.前端开发知识,前端基础CSS(2020-01-09)

    一.CSS字体样式属性 1.font-size:字号大小 2.font-family:字体 font-family属性用于设置字体.网页中常用的字体有宋体.微软雅黑.黑体等. * { /*font-f ...

  6. rest framework-认证&权限&限制-长期维护

    ###############   自定义token认证    ############### 表 class User(models.Model): name=models.CharField(ma ...

  7. 吴裕雄--天生自然python学习笔记:人脸识别用到的特征文件haarcascade_frontalface_default.xml下载

    下载地址:https://github.com/opencv/opencv/tree/master/data/haarcascades 1.找到haarcascade_frontalface_defa ...

  8. Critical-Value|Critical-Value Approach to Hypothesis Testing

    9.2 Critical-Value Approach to Hypothesis Testing example: 对于mean 值 275 的假设: 有一个关于sample mean的distri ...

  9. [LC] 485. Max Consecutive Ones

    Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...

  10. 发现日志文件和打印在eclipse控制台中的编码不一致

    发现日志文件和打印在eclipse控制台中的编码不一致,正好相反. 日志文件是用notepad打开的,notepad有自己的编码方式,查询编码为utf-8,日志文件汉字等等显示正常. 但是在eclip ...