ADO.Net中DataSet的应用
一、思维导图
二、知识点
(一)DataSet其实就是数据集,DataSet是把数据库中的数据映射到内存缓存中的所构成的数据容器,对于任何数据源,它都提供一致的关系编程模型。在DataSet中既定义了数据表的约束关系以及数据表之间的关系,还可以对数据表中的数据进行排序等。DataSet使用方法一般有三种:
1. 把数据库中的数据通过DataAdapter对象填充DataSet。
2. 通过DataAdapter对象操作DataSet实现更新数据库。
3. 把XML数据流或文本加载到DataSet。
(二)DataSet主要有三个特性:
1. 独立性。DataSet独立于各种数据源。微软公司在推出DataSet时就考虑到各种数据源的多样性、复杂性。在.Net中,无论什么类型数据源,它都会提供一致的关系编程模型,而这就是DataSet。
2. 离线(断开)和连接。DataSet既可以以离线方式,也可以以实时连接来操作数据库中的数据。这一点有点像ADO中的RecordSet。
3. DataSet对象是一个可以用xml形式表示的数据视图,是一种数据关系视图。
(三)ADO.NET中的DataReader对象与DataSet对象的不同
使用DataReader与DataSet都可以从数据源读取数据。DataReader本身是通过IDbCommand.ExecuteReader()方法进行构建的;而DataSet则是通过DbDataAdapter.Fill()方法进行填充。此外,两者的工作方式有明显的不同:DataReader的执行过程不能脱离数据库连接,也就是在DataReader读取数据的时候不能够使用IDbConnection.Close()方法关闭数据库连接;而在使用DataSet获取数据时,可以断开数据库的连接,因为此时DbDataAdapter已经负责将数据获取到应用服务器中了。
(四)具体实例:
1、新建数据集
DataSet dataSet = new DataSet();
2、在数据库打开连接时用SQL数据适配器读取数据,并填充数据集
sqlDataAdapter.Fill(dataSet);
3、将数据表添加到数据集中的表集合中
DataTable departmentTable = dataSet.Tables[0]; DataTable doctorTable = dataSet.Tables[1];
4、声明数据关系,不创建约束(父列上的唯一约束、子列上的外键约束)
DataRelation[] dataRelations = { new DataRelation ("Department_doctor" , departmentTable.Columns["No"] , doctorTable.Columns["DepartmentNo"] , false) }
5、当有多个数据关系时,将数据关系数组批量加入数据集的关系集合中;
dataSet.Relations.AddRange(dataRelations);
6、浏览数据关系,运用foreach循环找到每一个节点
foreach (DataRow majorRow in departmentRow.GetChildRows("Department")) { TreeNode departmentrNode = new TreeNode(); departmentNode.Text = departmentRow["Name"].ToString(); departmentNode.Nodes.Add(departmentNode); foreach (DataRow classRow in majorRow.GetChildRows("doctor_Class")) { TreeNode doctorNode = new TreeNode(); doctorNode.Text = doctorRow["Name"].ToString(); doctorNode.Tag = doctorRow["No"]; doctorNode.Nodes.Add( doctorNode); } }