ADO.Net中DataSet的应用。

思维导图
在这里插入图片描述
DataSet是ADO.NET的中心概念。可以把DataSet当成内存中的数据库,DataSet是不依赖于数据库的独立数据集合。也就是说,即使断开数据链路,或者关闭数据库,DataSet依然是可用的。
DataSet对象的三大特性
1.独立性。DataSet独立于各种数据源。
2.离线(断开)和连接。
3.DataSet对象是一个可以用XML形式表示的数据视图,是一种数据关系视图。

DataSet常用的属性和方法

属性描述
TablesDataSet对象中包含的数据表集合
RelationsDataSet对象中包含的关系集合
CaseSensitive指示DataTable对象中的字符串是否区分大小写
EnforceConstraints获取或设置一个值,指示在更新操作时是否遵循约束规则
方法描述
AcceptChanges()提交自加载DataSet或上次调用该方法以来对其进行的更改
Clear()通过移除所有表的所有行来清除DataSet数据
Clone()复制DataSet结构,包括所有DataTable架构、关系和约束
Copy()复制DataSet结构和数据
HasChanges()获取一个值,指示DataSet中是否有增、删、改的行。
RejectChanges()回滚自加载DataSet或上次调用该方法以来对其进行的更改

使用Dataset的几个步骤
1.创建到数据源的连接,创建sqlCommand对象,指定一个存储过程的名字或者一个SQL语句,指定数据链路;

            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
            ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             //配置管理器从配置文件读取连接字符串,并将之赋予SQL连接的连接字符串属性;
            SqlCommand sqlCommand = new SqlCommand();                                                        //声明并实例化SQL命令;
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;
            sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
                  "SELECT * FROM tb_ks;"                                                              //该命令分别查询所有科室,设备,查询结果将返回多张表;
                  + "SELECT * FROM tb_sb;";

2.声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;并将SQL数据适配器的查询命令属性指向SQL命令;

SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                           //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
sqlDataAdapter.SelectCommand = sqlCommand;                                                      //将SQL数据适配器的查询命令属性指向SQL命令;

3.创建一个Dataset对象

DataSet dataSet = new DataSet();  

4.调用SQL数据适配器读取数据,并填充数据集;

sqlDataAdapter.Fill(dataSet);                                                                   //SQL数据适配器读取数据,并填充数据集;

5.操作数据。,下面用树形视图来操纵Dataset中的数据。

代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Data.SqlClient;                                                                                //包含访问SQL Server所需的各类对象;
using System.Configuration;                                                                                 //包含访问配置文件所需的配置管理器;需事先在本项目的“引用”中添加对System.Configuration的引用;


namespace WindowsFormsApplication1
{
    public partial class frm_sbmanage : Form
    {
        public frm_sbmanage()
        {
            InitializeComponent();
            this.StartPosition = FormStartPosition.CenterScreen;                                            //本窗体启动位置设为屏幕中央;
            this.dgv_Student.AllowUserToAddRows = false;                                                    //数据网格视图不允许用户添加行;
            this.dgv_Student.RowHeadersVisible = false;                                                     //数据网格视图的行标题不可见;
            this.dgv_Student.BackgroundColor = Color.White;                                                 //数据网格视图的背景色设为白色;
            this.dgv_Student.AutoSizeColumnsMode =
                DataGridViewAutoSizeColumnsMode.AllCells;                                                   //数据网格视图的自动调整列宽模式设为显示所有单元格;
        }

        private void sbmanage_Load(object sender, EventArgs e)
        {
            SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
            sqlConnection.ConnectionString =
                ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             //配置管理器从配置文件读取连接字符串,并将之赋予SQL连接的连接字符串属性;
            SqlCommand sqlCommand = new SqlCommand();                                                        //声明并实例化SQL命令;
            sqlCommand.Connection = sqlConnection;                                                          //将SQL命令的连接属性指向SQL连接;
            sqlCommand.CommandText =                                                                        //指定SQL命令的命令文本;
                "SELECT * FROM tb_ks;"                                                              //该命令分别查询所有科室,设备,查询结果将返回多张表;
                + "SELECT * FROM tb_sb;";
            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 ksTable = dataSet.Tables[0];                                                  //声明科室数据表,对应数据集的表集合中的第1张数据表;
            DataTable sbTable = dataSet.Tables[1];                                                       //声明设备数据表,对应数据集的表集合中的第2张数据表;
            DataRelation[] dataRelations =                                                                  //声明数据关系数组;
            {
                new DataRelation                                                                            //实例化数据关系,实现科室表,设备表之间的层次关系;
                    ("Department_Major"                                                                     //数据关系名称;
                    , ksTable.Columns["No"]                                                         //父表的被参照列为科室表的编号列;
                    , sbTable.Columns["Ksno"]                                                    //子表的参照列为设备表的科室编号列;
                    , false)                                                                                //不创建约束(父列上的唯一约束、子列上的外键约束);
            };
            dataSet.Relations.AddRange(dataRelations);                                                      //将数据关系数组批量加入数据集的关系集合中;
            this.trv_EducationUnit.Nodes.Clear();                                                           //树形视图的节点集合清空;
            foreach (DataRow ksRow in ksTable.Rows)                                         //遍历科室数据表中的每一数据行;
            {
                TreeNode ksNode = new TreeNode();                                                   //声明并实例化科室节点,该节点对应当前某个科室;
                ksNode.Text = ksRow["Name"].ToString();                                     //科室节点的文本设为当前科室的名称;
                this.trv_EducationUnit.Nodes.Add(ksNode);                                           //将科室节点加入树形视图的(根)节点集合;
                foreach (DataRow sbRow in ksRow.GetChildRows("Department_Major"))                //借助先前定义的数据关系,遍历当前科室所在数据行的子行,即下属所有设备;
                {
                    TreeNode sbNode = new TreeNode();                                                    //声明并实例化设备节点,该节点对应当前某个设备;
                    sbNode.Text = sbRow["Name"].ToString();                                           //专业节点的文本设为当前设备的名称;
                    ksNode.Nodes.Add(sbNode);                                                    //专业节点加入当前科室节点的节点集合,成为第1级节点之一;
        
                }
            }


        }

        private void trv_EducationUnit_AfterSelect(object sender, TreeViewEventArgs e)
        {
            if (this.trv_EducationUnit.SelectedNode.Level == 1)                                             //若树形视图的选中节点的级别为2,即选中设备节点;
            {
                String  Name = this.trv_EducationUnit.SelectedNode.Text.ToString ();                                 //将树形视图的选中节点的标签转为整型,即可获得事先保存的设备编号;
                SqlConnection sqlConnection = new SqlConnection();                                              //声明并实例化SQL连接;
                sqlConnection.ConnectionString =
                    ConfigurationManager.ConnectionStrings["Sql"].ConnectionString;                             //配置管理器从配置文件读取连接字符串,并将之赋予SQL连接的连接字符串属性;
                SqlCommand sqlCommand = new SqlCommand();                                                        //声明并实例化SQL命令;
                sqlCommand.Connection = sqlConnection;                                                      //将SQL命令的连接属性指向SQL连接;
                sqlCommand.CommandText = "SELECT * FROM tb_sb WHERE Name=@Name;";          //指定SQL命令的命令文本;该命令查询当前选中设备的信息,以用作数据网格视图数据源;
                sqlCommand.Parameters.AddWithValue("@Name", Name);                                    //向SQL命令的参数集合添加参数的名称、值;
                SqlDataAdapter sqlDataAdapter = new SqlDataAdapter();                                       //声明并实例化SQL数据适配器,同时借助构造函数,将其SelectCommand属性设为先前创建的SQL命令;
                sqlDataAdapter.SelectCommand = sqlCommand;                                                  //将SQL数据适配器的查询命令属性指向SQL命令;
                DataTable sb1Table = new DataTable();                                                   //声明并实例化数据表,用于保存当前选中设备信息,以用作数据网格视图的数据源;
                sqlConnection.Open();                                                                       //打开SQL连接;
                sqlDataAdapter.Fill(sb1Table);                                                          //SQL数据适配器读取数据,并填充设备;
                sqlConnection.Close();                                                                      //关闭SQL连接;
                this.dgv_Student.DataSource = sb1Table;                                                 //设置数据网格视图的数据源;
                this.dgv_Student.Columns["No"].HeaderText = "编号";                                         //将数据网格视图的指定列的表头文本设为中文;
                this.dgv_Student.Columns["Name"].HeaderText = "名称";
                this.dgv_Student.Columns["Address"].HeaderText = "简介";                                         //将数据网格视图的指定列的表头文本设为中文;
                this.dgv_Student.Columns["Date"].HeaderText = "起用时间";
                this.dgv_Student.Columns["Image"].Visible = false;
                this.dgv_Student.Columns["Ksno"].Visible = false;
                this.dgv_Student.Columns["Value"].Visible = false;
                this.dgv_Student.Columns[this.dgv_Student.Columns.Count - 1].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;        //数据网格视图的最后一列的自动调整列宽模式设为填充(至数据网格视图右侧边缘);
                    
            }
        }

        private void dgv_Student_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {

        }
    }
}

运行结果

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值