• C#的数据集:DataSet对象


    目录

    一、合并DataSet内容

    1.源码

    2.生成效果 

    二、 复制DataSet内容

    1.源码

    2.生成效果


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

    一、合并DataSet内容

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

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

    1. public void Merge
    2. (
    3. DataSet dataSet,
    4. bool preserveChanges,
    5. MissingSchemaAction missingSchemaAction
    6. ☑ dataSet:其数据和架构将被合并到DataSet中。
    7. ☑ preserveChanges:要保留当前DataSet中的更改,则为true;否则为false
    8. ☑ missingSchemaAction:MissingSchemaAction枚举值之一。

            MissingSchemaAction枚举成员及说明

      枚举成员

    说     明

      Add

    添加必需的列以完成架构

    AddWithKey

    添加必需的列和主键信息以完成架构,用户可以在每个DataTable上显式设置主键约束。这将确保对与现有记录匹配的传入记录进行更新,而不是追加

      Error

    如果缺少指定的列映射,则生成InvalidOperationException

      Ignore

    忽略额外列

    1.源码

    1. //Form1.cs
    2. //使用DataSet的Merge()方法将DataSet、DataTable或DataRow数组的内容并入现有的DataSet中。
    3. using System;
    4. using System.Collections.Generic;
    5. using System.ComponentModel;
    6. using System.Data;
    7. using System.Data.SqlClient;
    8. using System.Drawing;
    9. using System.Linq;
    10. using System.Text;
    11. using System.Threading.Tasks;
    12. using System.Windows.Forms;
    13. namespace _9
    14. {
    15. public partial class Form1 : Form
    16. {
    17. public Form1()
    18. {
    19. InitializeComponent();
    20. }
    21. SqlConnection conn;
    22. private void Form1_Load(object sender, EventArgs e)
    23. {
    24. //conn = new SqlConnection("Server=DESKTOP-QFENBNJ\\SQL_WEN;integrated security=SSPI;Initial Catalog=db_CSharp");
    25. conn = new SqlConnection("Server=DESKTOP-GFMO83R;integrated security=SSPI;Initial Catalog=db_CSharp");
    26. DataSet ds = new DataSet(); //创建数据集
    27. DataSet ds1 = new DataSet();
    28. SqlDataAdapter sda = new SqlDataAdapter("select * from tb_test", conn); //创建用于连接SQL的适配器对象
    29. sda.Fill(ds); //填充数据集
    30. SqlDataAdapter sda1 = new SqlDataAdapter("select * from tb_man", conn);
    31. /*SqlCommandBuilder sbl = new SqlCommandBuilder(sda1); */ //创建适配器sda1的SqlCommandBuilder对象,可删除
    32. sda1.Fill(ds1);
    33. ds1.Merge(ds, true, MissingSchemaAction.Add/*WithKey*/); //数据集ds合并到数据集ds1,都可以
    34. dataGridView1.DataSource = ds1.Tables[0]; //dataGridView1的数据源是ds1
    35. /*dataGridView1.DataSource = ds.Tables[0]; */ //测试
    36. }
    37. }
    38. }

    2.生成效果 

    二、 复制DataSet内容

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

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

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

    1. 语法如下:
    2. public DataSet Copy()
    3. 返回值:新的DataSet,具有与该DataSet相同的结构(表架构、关系和约束)和数据。

    1.源码

    1. //Form1.cs
    2. //复制DataSet内容
    3. using System;
    4. using System.Collections.Generic;
    5. using System.ComponentModel;
    6. using System.Data;
    7. using System.Data.SqlClient;
    8. using System.Drawing;
    9. using System.Linq;
    10. using System.Text;
    11. using System.Threading.Tasks;
    12. using System.Windows.Forms;
    13. namespace _10
    14. {
    15. public partial class Form1 : Form
    16. {
    17. public Form1()
    18. {
    19. InitializeComponent();
    20. }
    21. SqlConnection conn;
    22. DataSet ds;
    23. ///
    24. /// 初始化Form1
    25. ///
    26. private void Form1_Load(object sender, EventArgs e)
    27. {
    28. button1.Text = "复制";
    29. //conn = new SqlConnection("Server=DESKTOP-QFENBNJ\\SQL_WEN;integrated security=SSPI;Initial Catalog=db_CSharp");
    30. conn = new SqlConnection("Server=DESKTOP-GFMO83R;integrated security=SSPI;Initial Catalog=db_CSharp");
    31. SqlCommand cmd = new SqlCommand("select * from tb_test", conn);//创建SqlCommand对象,建立数据集与SQL的关联
    32. SqlDataAdapter sda = new SqlDataAdapter //创建数据适配器对象sda
    33. {
    34. SelectCommand = cmd
    35. };
    36. ds = new DataSet(); //创建数据集ds
    37. sda.Fill(ds/*, "test"*/); //填充数据集ds,注释部分可删除
    38. dataGridView1.DataSource = ds.Tables[0]; //dataGridView1的数据源=ds
    39. }
    40. ///
    41. /// 复制数据集DataSet
    42. ///
    43. private void Button1_Click(object sender, EventArgs e)
    44. {
    45. DataSet ds1 = ds.Copy(); //复制ds到ds1
    46. dataGridView2.DataSource = ds1.Tables[0]; //dataGridView2的数据源=ds1
    47. }
    48. }
    49. }

    2.生成效果

     

  • 相关阅读:
    期货十三篇 第四篇 开仓篇
    拼凑硬币问题
    LeetCode 0592. 分数加减运算:手把手分步のC++讲解
    三车道交通流元胞自动机研究(matlab代码实现)
    Polygon zkEVM可验证计算简单状态机示例
    shiro配置文件shiro.ini简介说明
    Go uuid库介绍
    【重识云原生】第六章容器6.2.1节——Kubernetes概述
    计算属性,侦听属性,方法区别及例子
    【SpringCloud】Nacos的安装、Nacos注册、Nacos服务多级存储模型
  • 原文地址:https://blog.csdn.net/wenchm/article/details/133894281