第九周学习笔记:ADO.Net中DataSet的应用

ADO.Net中DataSet的应用

一.思维导图

 

 

一.相关知识点

三大特性

DataSet对象的三大特性:

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

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

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

使用方法

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

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

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

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

 

  1. DataSet类是ADO.NET中最核心的成员之一,也是各种开发基于.Net平台程序语言开发数据库应用程序最常接触的类。每一个DataSet都有很多个DataTables和Relationships。RelationShip应该也是一种表,特殊的是,这个表只是用来联系两个数据表的。每一个DataTable都有很多datarows和datacols, 也包括ParentRelations,ChildRelations 和一些限制条件像主键不可以重复的限制。

2. DataSet每一行有一个RowState属性。主要是反映当前行是否已经被删掉了,被更新了,还是本没变。有如下的几个选项: Deleted, Modified, New, and Unchanged。

3.对DataSet的任何操作,都是在计算机缓存中完成的。

在从数据库完成数据抽取后,DataSet就是数据的存放地,它是各种数据源中的数据在计算机内存中映射成的缓存,所以有时说DataSet可以看成是一个数据容器。

4. DataSet使用方法一般有三种:

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

DataAdapter填充DataSet的过程分为二步:

首先通过DataAdapter的SqlCommand属性从数据库中检索出需要的数据。SqlCommand其实是一个Command对象。

然后再通过DataAdapter的Fill方法把检索来的数据填充DataSet。

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

DataAdapter是通过其Update方法实现以DataSet中数据来更新数据库的。当DataSet实例中包含数据发生更改后,此时调用Update方法,DataAdapter 将分析已作出的更改并执行相应的命令(INSERT、UPDATE 或 DELETE),并以此命令来更新数据库中的数据。

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

DataSet中的数据可以从XML数据流或文档创建。加载XML数据流和文档到DataSet中是可使用DataSet对象的ReadXml方法。

 

5.数据绑定分成二类:简单型数据绑定和复杂型数据绑定。适用于简单型数据绑定组件一般有Lable、TextBox等,适用于复杂性数据绑定的组件一般有DataGrid、ListBox、ComboBox等。

(1)简单型数据绑定一般使用这些组件中的DataBindings属性的Add方法把DataSet中某一个DataTable中的某一行和组件的某个属性绑定起来,从而达到显示数据的效果。

比如:textBox1.DataBindings.Add ( "Text" , dsDataSet1, " Customers. CustomerID ") ;

(2)8复杂性数据绑定一般是设定组件的DataSource属性和DisplayMember属性来完成数据绑定的。DataSource属性值一般设定为要绑定的DataSet,DisplayMember属性值一般设定为要绑定的数据表或数据表中的某一列。

比如:dataGrid1.DataSource = dsDataSet1 ;

dataGrid1.DataMember = " Customers " ;

 

DataSet的属性Tables可以获取该DATASET中表的数量:DataSet.Tables.Count

 

DataSet的Tables是一个Table数组,指定其中的一个表:DataSet.Tables[i];//i为

 

Table在数组序列中的位置 或 DataSet.Tables["表名"]; 

 

通过Table的Rows对象组的Count获取该表的记录数:DataSet.Tables[i].Rows.Count;

 

获取列数:DataSet.Tables[i].Columns.Count;

 

二.相关代码

 private void btn_Load_Click(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();
            sqlConnection.ConnectionString =
                         "Server=(local);Database=MZJJSFXT;Integrated Security=sspi";
            SqlCommand sqlCommand = new SqlCommand();
            sqlCommand.Connection = sqlConnection;
            sqlCommand.CommandText = "SELECT * FROM dbo.tb_Department;"
                            + "SELECT * FROM dbo.医生信息表;"
                            + "SELECT * FROM dbo.科室信息表;";
            SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();
            sqlDataAdapter.SelectCommand = sqlCommand;
            DataSet dataSet = new DataSet(); //声明并实例化数据集,用于保存查得的多张表;           
            sqlConnection.Open();
            sqlDataAdapter.Fill(dataSet); //SQL数据适配器读取数据,并填充数据集;
            sqlConnection.Close();
            DataTable DepartmentTable = dataSet.Tables[0]; //声明部门数据表,对应数据集的表集合中的第1张数据表; 
            DataTable 科室信息表Table = dataSet.Tables[1];//声明科室数据表,对应数据集的表集合中的第2张数据表;  
            DataTable 医生信息表Table = dataSet.Tables[2];//声明医生数据表,对应数据集的表集合中的第1张数据表; 
            DataRelation[] dataRelations =      //声明数据关系数组;         
{
new DataRelation
   ("Department_科室信息表"
  , DepartmentTable.Columns["No"] 
  , 科室信息表Table.Columns["科室类型"]  
  , false)  
, new DataRelation ("科室信息表_医生信息表" 
  , 科室信息表Table.Columns["科室名称"]                    
  ,医生信息表Table.Columns["所在科室"] 
  , false) 
            };
            dataSet.Relations.AddRange(dataRelations);                                                      //将数据关系数组批量加入数据集的关系集合中;
            this.trv_EducationUnit.Nodes.Clear();                                                           //树形视图的节点集合清空;
            foreach (DataRow DepartmentRow in DepartmentTable.Rows)                                         //遍历院系数据表中的每一数据行;
            {
                TreeNode DepartmentNode = new TreeNode();                                                   //声明并实例化院系节点,该节点对应当前某个院系;
                DepartmentNode.Text = DepartmentRow["Name"].ToString();                                     //院系节点的文本设为当前院系的名称;
                this.trv_EducationUnit.Nodes.Add(DepartmentNode);                                           //将院系节点加入树形视图的(根)节点集合;
                foreach (DataRow 科室信息表Row in DepartmentRow.GetChildRows("Department_科室信息表"))                //借助先前定义的数据关系,遍历当前院系所在数据行的子行,即下属所有专业;
                {
                    TreeNode 科室信息表Node = new TreeNode();                                                    //声明并实例化专业节点,该节点对应当前某个专业;
                    科室信息表Node.Text = 科室信息表Row["科室名称"].ToString();                                           //专业节点的文本设为当前专业的名称;
                    DepartmentNode.Nodes.Add(科室信息表Node);                                                    //专业节点加入当前院系节点的节点集合,成为第1级节点之一;
                    foreach (DataRow 医生信息表Row in 科室信息表Row.GetChildRows("科室信息表_医生信息表"))                      //借助先前定义的数据关系,遍历当前专业所在数据行的子行,即下属所有班级;
                    {
                        TreeNode 医生信息表Node = new TreeNode();                                                //声明并实例化班级节点,该节点对应当前某个班级;
                        医生信息表Node.Text = 医生信息表Row["所在科室"].ToString();                                       //班级节点的文本设为当前班级的名称;
                        医生信息表Node.Tag =医生信息表Row["拼音码"];                                                     //班级节点的标签设为当前班级的编号;
                        科室信息表Node.Nodes.Add(医生信息表Node);                                                     //班级节点加入当前专业节点的节点集合,成为第2级节点之一;
                    }
                }
            }
        }

        private void trv_EducationUnit_AfterSelect(object sender, TreeViewEventArgs e)
        {
              if (this.trv_EducationUnit.SelectedNode.Level == 2)                                             //若树形视图的选中节点的级别为3,即选中班级节点;
            {
                int 拼音码 = (int)this.trv_EducationUnit.SelectedNode.Tag;                                 //将树形视图的选中节点的标签转为整型,即可获得事先保存的班级编号;
                SqlConnection sqlConnection = new SqlConnection();                                          //声明并实例化SQL连接;
                sqlConnection.ConnectionString =
                    "Server=(local);Database=MZJJSFXT;Integrated Security=sspi";                         //在字符串变量中,描述连接字符串所需的服务器地址、数据库名称、集成安全性(即是否使用Windows验证);
                SqlCommand sqlCommand = new SqlCommand();                                                   //声明并实例化SQL命令;
                sqlCommand.Connection = sqlConnection;                                                      //将SQL命令的连接属性指向SQL连接;
                sqlCommand.CommandText = "SELECT 姓名,性别,职称,联系电话 FROM dbo.医生信息表 WHERE 所在科室=@所在科室;";          //指定SQL命令的命令文本;该命令查询当前选中班级的所有学生名单,以用作数据网格视图数据源;
                sqlCommand.Parameters.AddWithValue("@所在科室",'1');                                    //向SQL命令的参数集合添加参数的名称、值;
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                       //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
                sqlDataAdapter.SelectCommand = sqlCommand;                                                  //将SQL数据适配器的查询命令属性指向SQL命令;
                DataTable studentTable = new DataTable();                                                   //声明并实例化数据表,用于保存当前选中班级的所有学生名单,以用作数据网格视图的数据源;
                sqlConnection.Open();                                                                       //打开SQL连接;
                sqlDataAdapter.Fill(studentTable);                                                          //SQL数据适配器读取数据,并填充班级数据表;
                sqlConnection.Close();                                                                      //关闭SQL连接;
                this.dgv_Student.DataSource = studentTable;                                                 //设置数据网格视图的数据源;
                this.dgv_Student.Columns["姓名"].HeaderText = "姓名";                                         //将数据网格视图的指定列的表头文本设为中文;
                this.dgv_Student.Columns["性别"].HeaderText = "性别";
                this.dgv_Student.Columns["职称"].HeaderText = "职称";                                         //将数据网格视图的指定列的表头文本设为中文;
                this.dgv_Student.Columns["联系电话"].HeaderText = "联系电话";

                this.dgv_Student.Columns[this.dgv_Student.Columns.Count - 1].AutoSizeMode =                 //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
                    DataGridViewAutoSizeColumnMode.Fill;
            }
        }
    }                                                                                                    
}

三.效果截图

 

猜你喜欢

转载自www.cnblogs.com/lgy316/p/9968233.html
今日推荐