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

  

posted @ 2018-11-21 23:53  ZH512627  阅读(119)  评论(0编辑  收藏  举报