C# 数据集之 DataSet 对象

01  DataSet 对象概述

53ad61cbbb6dca34fc1e280f2f52f396.png

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

例1

使用数据适配器(DataAdapter)从数据库中查询数据,调用其 Fill 方法填充 DataSet 对象。

代码如下:

//连接数据库
conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd="); 
DataSet ds = new DataSet();                                             //创建一个 DataSet
SqIDataAdapter sda = new SqlDataAdapter("select * from tb_test", conn); //创建一个 SqLDataAdapter 对象 
sda.Fill(ds);                                                           //使用 Fill 方法填充 DataSet

02  合并 DataSet 内容

可以使用 DataSet 的 Merge 方法将 DataSet、DataTable 或 DataRow 数组的内容并入现有的 DataSet 中。Merge 方法将指定的 DataSet 及其架构与当前的 DataSet 合并,在此过程中,将根据给定的参数保留或放弃在当前 DataSet 中的更改并处理不兼容的架构。

语法如下:

public void Merge(

        DataSet dataSet,

        bool preserveChanges,

MissingSchemaAction missingSchemaAction

)

c0c4bb4973e4aa82d8c76857de29d881.png   dataSet:其数据和架构将被合并到 DataSet 中。

9a9efb27906242022edf39162bfabbc2.png   preserveChanges:要保留当前 DataSet 中的更改,则为 true;否则为 false。 

42c48d5c56582e0e0edca5da68a491ae.png   missingSchemaAction:MissingSchemaAction 枚举值之一。 

3e1c162c082059bc3118fd4b6c04f89d.png   MissingSchemaAction 枚举成员及说明如表1 所示。

2aad33cdd668dcd3e7c52a06dec44478.png

 表1  MissingSchemaAction 枚举成员及说明

注意

当 DataSet 对象为 null 时,无法进行合并。

例2

 创建一个 Windows 应用程序,向窗体中添加一个 DataGridView 控件。首先获取数据表 tb_test 中的数据,并将其存储在 DataSet 对象 ds 中。然后再获取数据表 tb_man 中的数据,将其存储在另一个 DataSet 对象 ds1 中。最后调用 DataSet 对象的 Merge 方法,将 ds 与 ds1 合并。

代码如下:

SqlConnection conn;
private void Form1_Load(object sender, EventArgs e)
{
     //实例化 SqlConnection 变量 conn,连接数据库


     conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
     //创建两个 DataSet
     DataSet ds = new DataSet(); 
     DataSet ds1 = new DataSet();
     //创建一个 SqlDataAdapter 对象
     SqlDataAdapter sda = new SqlDataAdapter("select * from tb_test",conn);
     //使用 Fill 方法填充 DataSet 
     sda.Fill(ds);
     //创建一个 SqlDataAdapter 对象
     SqlDataAdapter sda1= new SqlDataAdapter("select * from tb_man",conn);
     //创建一个 SqlCommandBuilder 对象
     SqlCommandBuilder sbl = new SqlCommandBuilder(sda1);
     //使用 Fill 方法填充 DataSet 
     sda1.Fill(ds1);
     //使用 Merge 方法将 ds 合并到 ds1 中
     ds1.Merge(ds,true,MissingSchemaAction.AddWithKey);
     //设置 dataGridView1 控件的数据源
     dataGridView1.DataSource = ds1.Tables[0];
}

程序的运行结果如图1 所示。

5ae7611fde9875db012a2d0426e62273.png

图1   合并 DataSet

03  复制 DataSet 内容

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

20be7e1a1d3e5dff6712ed6e234c4063.png  创建 DataSet 的原样副本,其中包含架构、数据、行状态信息和行版本。

bdd57850f987923ca1a712d313656916.png  创建包含现有 DataSet 的架构,但仅包含已修改行的 DataSet。可以返回已修改的所有行或者指定特定的 DataRowState。有关行状态的更多信息,可参见行状态与行版本。

a26631b0dbde90235c33c4e784dc9f62.png  仅复制 DataSet 的架构(即关系结构),而不复制任何行。可以使用 ImportRow 将行导入现有的 DataTable。

可以使用 DataSet 对象的 Copy 方法创建包含架构和数据的 DataSet 的原样副本。Copy 方法的功能是复制指定 DataSet 的结构和数据。

语法如下:

public DataSet Copy()

返回值:新的 DataSet,具有与该 DataSet 相同的结构(表架构、关系和约束)和数据。

例3

创建一个 Windows 应用程序,向窗体中添加两个 DataGridView 控件和一个 Button控件。第一个 DataGridView 控件用于显示数据表 tb_test 中的数据,当单击 Button 控件后,通过 DataSet对象的 Copy 方法复制第一个 DataGridView 控件的 DataSet,并作为第二个 DataGridView 控件的数据源。

代码如下:

SqlConnection conn;                                 //声明一个 SqlConnection 变量
DataSet ds;                                         //声明一个 DataSet 变量
private void Form1_Load(object sender, EventArgs e)
{
     //实例化 SqlConnection 变量conn,连接数据库
    conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
    //创建一个 SqlCommand 对象
    SqlCommand cmd = new SqlCommand("select * from tb_test",conn);
    //创建一个 SqlDataAdapter 对象
    SqlDataAdapter sda = new SqlDataAdapter();
    //设置 SqlDataAdapter 对象的 SelectCommand 属性,以及其执行的 SQL 语句
    sda.SelectCommand = cmd;
    //实例化 DataSet 
    ds = new DataSet();
    //使用 SqlDataAdapter 对象的 Fill 方法填充 DataSet 
    sda.Fill(ds,"test");
    //设置 dataGridView1 的数据源
    dataGridView1.DataSource = ds.Tables[0];
}
private void button1_Click(object sender, EventArgs e)
{
     DataSet ds1 = ds.Copy();                       //调用 DataSet 的 Copy 方法复制 ds 中的内容
     dataGridView2.DataSource = ds1.Tables[0];      //将 ds1 作为 dataGridView2 的数据源
}

程序的运行结果如图2 所示。

5f876f7a413bc1f7d831084fc09a53f9.png

图2   复制 DataSet

往期推荐

9044b5fc70d0c34838f216f69b026180.png

Love life,love yourself

关注小编不迷路呦~

-----------------------------------

公众号【Csharp编程大全】,需要进技术群交流的,请添加小编mm1552923!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值