ADO.net中DataSet的应用

DataSet的简介与特征

DataSet是ADO. NET实现断开式连接的主要组件,是以数据源中检索到的数据在内存中的缓存形式,可以视为内存中的一个虚拟数据库,一般情况下。应用程序并不直接和数据库进行交互.而是使用DataSet中的数据操作,DataSet主要有以下三个特征,

 (1)具有与数据原无关的特性,

DataSet被填充数据后,与数据库保持断开方式和实时连接方式均可使用。

 (2)独立于使用的各种数据源。
无论什么类型数据源,都提供了一致的编程模型DataSet。

   (3)DataSet对象可以用XML形式表示数据视图。
这三大特征使ADO. NET技术较以往ADO版本有了较大提升。
既然断开连接后,数据的所有操作都集中在DataSet上,下面的任务就是去研究如何手动操作DataSet内部结构。掌握了这些,就能灵活处理DataSet中的数据了。

知识点描述

DataSet是由一组DataTable对象组成,每个DataTable对象又由行和列组成,它和物理数据表是一样的结构;并可借助于DataRelation对象将DataTable相互关联;其次,还可使用UniqueConstraint或ForeignkeyConstraint约束对象在DataSet中实施数据完整性。

DataSet常用构造方法

构造方法

描述

DataSet()

无参构造函数,初始化DataSet

DataSet(string dataSetName)

参数dataSetName设置DataSet名称,初始化DataSet

 
   

DataSet常用的属性和方法

 

成员

描述

属性

Tables

 DataSet对象中包含的数据表集合

Relations

DataSet对象中包含的关系集合

CaseSensitive

指示DataTable对象中的字符串是否区分大小写

EnforceConstraints

获取或设置一个值,指示在更新操作时是否遵循约束规则

方法

AcceptChanges()

提交自加载DataSet或上次调用该方法以来对其进行的更改

Clear()

通过移除所有表的所有行来清除DataSet数据

Clone()

复制DataSet结构,包括所有DataTable架构、关系和约束

Copy()

复制DataSet结构和数据

HasChanges()

获取一个值,指示DataSet中是否有增、删、改的行。

RejectChanges()

回滚自加载DataSet或上次调用该方法以来对其进行的更改

 
 
   

思维导图

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

运行代码

 private void frm_Ks_Load(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                  //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
               ConfigurationManager.ConnectionStrings["Sql"].ToString();                           //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
            SqlCommand sqlCommand = new SqlCommand();                                                       //声明并实例化SQL命令;
            sqlCommand.Connection = sqlConnection;
            sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
                "SELECT * FROM Ks;"                                                              //该命令分别查询所有院系、专业、班级,查询结果将返回多张表;
                + "SELECT * FROM Mzys;";
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
            sqlDataAdapter.SelectCommand = sqlCommand;                                                      //将SQL数据适配器的查询命令属性指向SQL命令;
            DataSet dataSet = new DataSet();                                                                //声明并实例化数据集,用于保存查得的多张表;
            sqlConnection.Open();                                                                           //打开SQL连接;
            sqlDataAdapter.Fill(dataSet);                                                                   //SQL数据适配器读取数据,并填充数据集;
            sqlConnection.Close();                                                                          //关闭SQL连接;
            DataTable Ks = dataSet.Tables[0];                                                  //声明院系数据表,对应数据集的表集合中的第1张数据表;
            DataTable Mzys = dataSet.Tables[1];                                                       //声明专业数据表,对应数据集的表集合中的第2张数据表;                                                       //声明班级数据表,对应数据集的表集合中的第3张数据表;
            DataRelation[] dataRelations =                                                                  //声明数据关系数组;好
            {
                new DataRelation                                                                            //实例化数据关系,实现院系表、专业表之间的层次关系;
                    ("Ks"                                                                     //数据关系名称;
                    , Ks.Columns["depe_code"]                                                         //父表的被参照列为院系表的编号列;
                    , Mzys.Columns["dept_code"]                                                    //子表的参照列为专业表的院系编号列;
                    , false)                                                                                //不创建约束(父列上的唯一约束、子列上的外键约束);
                                                                                         //不创建约束(父列上的唯一约束、子列上的外键约束);
            };
            dataSet.Relations.AddRange(dataRelations);                                                      //将数据关系数组批量加入数据集的关系集合中;
            this.trv_Ks.Nodes.Clear();                                                           //树形视图的节点集合清空;
            foreach (DataRow KsRow in Ks.Rows)                                         //遍历院系数据表中的每一数据行;
            {
                TreeNode KsNode = new TreeNode();                                                   //声明并实例化院系节点,该节点对应当前某个院系;
                KsNode.Text = KsRow["depet_name"].ToString();                                     //院系节点的文本设为当前院系的名称;
                this.trv_Ks.Nodes.Add(KsNode);                                           //将院系节点加入树形视图的(根)节点集合;
                foreach (DataRow MzysRow in KsRow.GetChildRows("Ks"))                //借助先前定义的数据关系,遍历当前院系所在数据行的子行,即下属所有专业;
                {
                    TreeNode MzysNode = new TreeNode();                                                    //声明并实例化专业节点,该节点对应当前某个专业;
                    MzysNode.Text = MzysRow["doctor_name"].ToString();                                           //专业节点的文本设为当前专业的名称;
                    KsNode.Nodes.Add(MzysNode);                                                    //专业节点加入当前院系节点的节点集合,成为第1级节点之一;
                   
                }
            }
        }

 

执行结果

 

 

 

posted @ 2018-11-21 20:02  陈XY  阅读(162)  评论(0编辑  收藏  举报