01 DataSet 对象概述
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
)
dataSet:其数据和架构将被合并到 DataSet 中。
preserveChanges:要保留当前 DataSet 中的更改,则为 true;否则为 false。
missingSchemaAction:MissingSchemaAction 枚举值之一。
MissingSchemaAction 枚举成员及说明如表1 所示。
表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 所示。
图1 合并 DataSet
03 复制 DataSet 内容
为了在不影响原始数据的情况下使用数据,或者使用 DataSet 中数据的子集,可以创建 DataSet 的副本。当复制 DataSet 时,可以:
创建 DataSet 的原样副本,其中包含架构、数据、行状态信息和行版本。
创建包含现有 DataSet 的架构,但仅包含已修改行的 DataSet。可以返回已修改的所有行或者指定特定的 DataRowState。有关行状态的更多信息,可参见行状态与行版本。
仅复制 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 所示。
图2 复制 DataSet
往期推荐
C# 分部类
C# 类型转换
C# 迭代器
C# 线程的基本操作(一)
C# 线程的基本操作(二)
C# 线程的基本操作(三)
Love life,love yourself
关注小编不迷路呦~
-----------------------------------
公众号【Csharp编程大全】,需要进技术群交流的,请添加小编mm1552923!