C#的数据集:DataSet对象

目录

一、合并DataSet内容

1.源码

2.生成效果

[二、 复制DataSet内容](#二、 复制DataSet内容)

1.源码

2.生成效果


DataSet对象就像存放于内存中的一个小型数据库。它可以包含数据表、数据列、数据行、视图、约束以及关系。通常,DataSet的数据来源于数据库或者XML,为了从数据库中获取数据,需要使用数据适配器(DataAdapter)从数据库中查询数据。

一、合并DataSet内容

可以使用DataSet的Merge()方法将DataSet、DataTable或DataRow数组的内容并入现有的DataSet中。

Merge()方法将指定的DataSet及其架构与当前的DataSet合并,在此过程中,将根据给定的参数保留或放弃在当前DataSet中的更改并处理不兼容的架构。 语法如下:

cs 复制代码
public void Merge
(
    DataSet dataSet,
    bool preserveChanges,
    MissingSchemaAction missingSchemaAction
)
☑ dataSet:其数据和架构将被合并到DataSet中。
☑ preserveChanges:要保留当前DataSet中的更改,则为true;否则为false。
☑ missingSchemaAction:MissingSchemaAction枚举值之一。

MissingSchemaAction枚举成员及说明

|--------------|------------------------------------------------------------------------|
| 枚举成员 | 说 明 |
| Add | 添加必需的列以完成架构 |
| AddWithKey | 添加必需的列和主键信息以完成架构,用户可以在每个DataTable上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新,而不是追加 |
| Error | 如果缺少指定的列映射,则生成InvalidOperationException |
| Ignore | 忽略额外列 |

1.源码

cs 复制代码
//Form1.cs
//使用DataSet的Merge()方法将DataSet、DataTable或DataRow数组的内容并入现有的DataSet中。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _9
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        SqlConnection conn;

        private void Form1_Load(object sender, EventArgs e)
        {
            //conn = new SqlConnection("Server=DESKTOP-QFENBNJ\\SQL_WEN;integrated security=SSPI;Initial Catalog=db_CSharp");
            conn = new SqlConnection("Server=DESKTOP-GFMO83R;integrated security=SSPI;Initial Catalog=db_CSharp");
            DataSet ds = new DataSet();                                             //创建数据集
            DataSet ds1 = new DataSet();
            SqlDataAdapter sda = new SqlDataAdapter("select * from tb_test", conn); //创建用于连接SQL的适配器对象
            sda.Fill(ds);                                                           //填充数据集
            SqlDataAdapter sda1 = new SqlDataAdapter("select * from tb_man", conn); 
            /*SqlCommandBuilder sbl = new SqlCommandBuilder(sda1);   */             //创建适配器sda1的SqlCommandBuilder对象,可删除
            sda1.Fill(ds1);
            ds1.Merge(ds, true, MissingSchemaAction.Add/*WithKey*/);                //数据集ds合并到数据集ds1,都可以
            dataGridView1.DataSource = ds1.Tables[0];                               //dataGridView1的数据源是ds1
            /*dataGridView1.DataSource = ds.Tables[0]; */                           //测试
        }
    }
}

2.生成效果

二、 复制 DataSet 内容

为了在不影响原始数据的情况下使用数据,或者使用DataSet中数据的子集,可以创建DataSet的副本。当复制DataSet时,可以:

cs 复制代码
    ☑ 创建DataSet的原样副本,其中包含架构、数据、行状态信息和行版本。
    ☑ 创建包含现有DataSet的架构但仅包含已修改行的DataSet。可以返回已修改的所有行或者指定特定的DataRowState。
    ☑ 仅复制DataSet的架构(即关系结构),而不复制任何行

可以使用ImportRow将行导入现有的可以使用DataSet对象的Copy()方法创建包含架构和数据的DataSet的原样副本。Copy()方法的功能是复制指定DataSet的结构和数据。

cs 复制代码
    语法如下:
    public DataSet Copy()
    返回值:新的DataSet,具有与该DataSet相同的结构(表架构、关系和约束)和数据。

1.源码

cs 复制代码
//Form1.cs
//复制DataSet内容
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace _10
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        SqlConnection conn;
        DataSet ds;

        /// <summary>
        /// 初始化Form1
        /// </summary>
        private void Form1_Load(object sender, EventArgs e)
        {
            button1.Text = "复制";

            //conn = new SqlConnection("Server=DESKTOP-QFENBNJ\\SQL_WEN;integrated security=SSPI;Initial Catalog=db_CSharp");
            conn = new SqlConnection("Server=DESKTOP-GFMO83R;integrated security=SSPI;Initial Catalog=db_CSharp");
            SqlCommand cmd = new SqlCommand("select * from tb_test", conn);//创建SqlCommand对象,建立数据集与SQL的关联
            SqlDataAdapter sda = new SqlDataAdapter     //创建数据适配器对象sda
            {
                SelectCommand = cmd
            };
            ds = new DataSet();                         //创建数据集ds
            sda.Fill(ds/*, "test"*/);                   //填充数据集ds,注释部分可删除
            dataGridView1.DataSource = ds.Tables[0];    //dataGridView1的数据源=ds
        }

        /// <summary>
        /// 复制数据集DataSet
        /// </summary>
        private void Button1_Click(object sender, EventArgs e)
        {
            DataSet ds1 = ds.Copy();                    //复制ds到ds1
            dataGridView2.DataSource = ds1.Tables[0];   //dataGridView2的数据源=ds1
        }
    }
}

2.生成效果

相关推荐
Azoner13 分钟前
postgresql安装部署(linux)
数据库·postgresql
PyAIGCMaster38 分钟前
文本模式下成功。ubuntu P104成功。
服务器·数据库·ubuntu
drebander1 小时前
MySQL 查询优化案例分享
数据库·mysql
初晴~1 小时前
【Redis分布式锁】高并发场景下秒杀业务的实现思路(集群模式)
java·数据库·redis·分布式·后端·spring·
盖世英雄酱581361 小时前
InnoDB 的页分裂和页合并
数据库·后端
YashanDB3 小时前
【YashanDB知识库】XMLAGG方法的兼容
数据库·yashandb·崖山数据库
独行soc3 小时前
#渗透测试#漏洞挖掘#红蓝攻防#护网#sql注入介绍11基于XML的SQL注入(XML-Based SQL Injection)
数据库·安全·web安全·漏洞挖掘·sql注入·hw·xml注入
风间琉璃""4 小时前
bugkctf 渗透测试1超详细版
数据库·web安全·网络安全·渗透测试·内网·安全工具
drebander4 小时前
SQL 实战-巧用 CASE WHEN 实现条件分组与统计
大数据·数据库·sql
IvorySQL4 小时前
IvorySQL 4.0 发布:全面支持 PostgreSQL 17
数据库·postgresql·开源数据库·国产数据库·ivorysql