C# 数据集之 DataSet 对象

01  DataSet 对象概述

C# 数据集之 DataSet 对象_第1张图片

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

)

C# 数据集之 DataSet 对象_第2张图片   dataSet:其数据和架构将被合并到 DataSet 中。

C# 数据集之 DataSet 对象_第3张图片   preserveChanges:要保留当前 DataSet 中的更改,则为 true;否则为 false。 

C# 数据集之 DataSet 对象_第4张图片   missingSchemaAction:MissingSchemaAction 枚举值之一。 

C# 数据集之 DataSet 对象_第5张图片   MissingSchemaAction 枚举成员及说明如表1 所示。

C# 数据集之 DataSet 对象_第6张图片

 表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 所示。

C# 数据集之 DataSet 对象_第7张图片

图1   合并 DataSet

03  复制 DataSet 内容

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

C# 数据集之 DataSet 对象_第8张图片  创建 DataSet 的原样副本,其中包含架构、数据、行状态信息和行版本。

C# 数据集之 DataSet 对象_第9张图片  创建包含现有 DataSet 的架构,但仅包含已修改行的 DataSet。可以返回已修改的所有行或者指定特定的 DataRowState。有关行状态的更多信息,可参见行状态与行版本。

C# 数据集之 DataSet 对象_第10张图片  仅复制 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 所示。

C# 数据集之 DataSet 对象_第11张图片

图2   复制 DataSet

往期推荐

  •   C#  分部类                   

  •   C#  类型转换

  •   C#  迭代器

  •   C#  线程的基本操作(一)

  •   C#  线程的基本操作(二)

  •   C#  线程的基本操作(三)

C# 数据集之 DataSet 对象_第12张图片

Love life,love yourself

关注小编不迷路呦~

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

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

你可能感兴趣的:(数据库,c#,java,mysql,python)