C# 数据适配器之 DataAdapter 对象

01  DataAdapter 对象概述

C# 数据适配器之 DataAdapter 对象_第1张图片


DataAdapter 对象是一个数据适配器对象,是DataSet 与数据源之间的桥梁。DataAdapter 对像提供了 4 个属性,用于实现与数据源之间的互通。

C# 数据适配器之 DataAdapter 对象_第2张图片   SelectCommand 属性:向数据库发送查询 SQL 语句。 

C# 数据适配器之 DataAdapter 对象_第3张图片   DeleteCommand 属性:向数据库发送删除 SQL语句。 

C# 数据适配器之 DataAdapter 对象_第4张图片   InsertCommand 属性:向数据库发送插入 SQL 语句。

C# 数据适配器之 DataAdapter 对象_第5张图片   UpdateCommand 属性:向数据库发送更新 SQL 语句。

在对数据库进行操作时,只要将这 4 个属性设置成相应的 SQL语向即可。DataAdapter 对象中还有几个主要的方法,具体如下。

(1) Fill 方法用数据填充 DataSet。

语法如下:

public int Fil(DataSet dataSet,string sreTable)

C# 数据适配器之 DataAdapter 对象_第6张图片   dataSet:要用记录和架构(如果必要)填充的 DataSet。

C# 数据适配器之 DataAdapter 对象_第7张图片   srcTable:用于表映射的源表的名称。

C# 数据适配器之 DataAdapter 对象_第8张图片   返回值:已在 DataSet 中成功添加或刷新的行数,这不包括受不返回行的语句影响的行。

   说明

当创建 DataAdapter 的实例时,将其读/写属性设置为初始值、MissingMappingAction 属性设置为 MissingMappingAction.Passthrough,MissingSchemaActicn 属性设置为 MissingSchemaAction.Add。

(2)Update 方法更新数据库时,DataAdapter 将调用 DeleteCommand、InsertCommand 以及 UpdateCommand 属性。

语法如下:

public int Update(DataTable dataTable)

C# 数据适配器之 DataAdapter 对象_第9张图片   dataTable:用于更新数据源的 DataTable。

C# 数据适配器之 DataAdapter 对象_第10张图片   返回值:DataSet 中成功更新的行数。

例如,如果使用 DataAdapter 对象的 Fill 方法从数据源中提取数据并填充到 DataSet 时,就会用到 SelectCommand 属性中设置的命令对象。

02  填充 DataSet 数据集

通过 DataAdapter 对象的 Fill 方法填充 DataSet 数据集,Fill 方法使用 Select 语句从数据源中检索数据。与 Select 命令关联的 Connection 对象必须有效,但不需要将其打开。

注意

DataSet 和 DataTable 对象从 MarshalByValueComponent(实现 IComponent 并提供可选程控制的组件的基实现)继承而来,并支持用于远程处理 ISerializable 接口。

例1

创建一个 Windows 应用程序,向窗体中添加一个 Button 控件和一个 DataGridView 控件,分别用于执行数据绑定以及显示数据表中的数据。当单击 Button 控件后,程序首先连接数据库,然后创建一个 SqIDataAdapter 对象,使用该对象的 Fill 方法填充 DataSet 数据集,最后设置 DataGridView 控件的数据源,显示查询的数据。

代码如下:

SqlConnection conn;
private void button1_Click(object sender, EventArgs e)
{
    //实例化 SqlConnection 变量 conn
    conn = new SqlConnection("server=.;database=db_15;uid=sa;pwd=");
    //创建一个 SqlCommand 对象
    SqlCommand cmd=new SqICommand("select * from tb_command",conn);
    //创建一个 SqlDataAdapter 对象
    SqlDataAdapter sda = new SqlDataAdapter();
    //设置 SqlDataAdapter 对象的 SelectCommand 属性为 cmd 
    sda.SelectCommand = cmd;
    //创建一个 DataSet 对象
    DataSet ds = new DataSet();
    //使用 SqlDataAdapter 对象的 Fill 方法填充 DataSet 数据集 
    sda.Fill(ds,"cs");
    //设置 dataGridView1 控件的数据源
    dataGridView1.DataSource = ds.Tables[0];
}

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

C# 数据适配器之 DataAdapter 对象_第11张图片

          图1 使用 Fill 方法填充 DataSet 数据集

03  更新数据源

使用 DataAdapter 对象的 Update 方法,可以将 DataSet 中修改过的数据及时地更新到数据库中,在调用 Update 方法之前,要实例化一个 CommandBuilder  类,它能自动根据 DataAdapter 的 SelectCommand 的 SQL 语句判断其他的 InsertCommand、UpdateCommand和 DeleteCommand。这样,就不用设置 DataAdapter 的 InsertCommand、UpdateCommand 和 DeleteCommand 属性,直接使用 DataAdapter 的 Update 方法来更新 DataSet、DataTable 或 DataRow 数组即可。

例2

创建一个 Windows 应用程序,查询 tb_command 表中的所有数据并将其显示在 DataGridView 控件中,单击某条数据,会显示其详细信息。当对某条数据进行修改后,单击“修改”按钮,使用 DataAdapter 对象的 Update 方法更新数据源。

代码如下:

SqlConnection conn;                                //声明一个 SqlConnection 变量
DataSet ds;                                        //声明一个 DataSet 变量
SqlDataAdapter sda;                                //声明一个 SqlDataAdapter 变量
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_command",conn);
     //实例化 SqlDataAdapter 对象 
     sda = new SqlDataAdapter();
     //设置 SqlDataAdapter 对象的 SelectCommand 属性为 cmd 
     sda.SelectCommand = cmd; 
     //实例化 DataSet 
     ds = new DataSet();
     //使用 SqlDataAdapter 对象的 Fill 方法填充 DataSet 
     sda.Fill(ds,"cs");
     //设置 dataGridView1 控件的数据源
     dataGridView1.DataSource = ds.Tables[0];
}
private void button1_Click(object sender, EventArgs e)
{
     DataTable dt = ds.Tables["cs"];               //创建一个 DataTable
     sda.FillSchema(dt, SchemaType.Mapped);        //把表结构加载到 tb_command 表中
     DataRow dr = dt.Rows.Find(txtNo.Text);        //创建一个 DataRow
     //设置 DetaRow 中的值
     dr["姓名"] = txtName.Text.Trim();
     dr["性别"] = this.txtSex.Text.Trim();
     dr["年龄"] = this.txtAge.Text.Trim();
     dr["奖金"] = this.txtJJ.Text.Trim();  
     //实例化一个 SqLCommandBuilder
     SqlCommandBuilder cmdbuilder = new SqlCommandBuilder(sda);
     //调用其 Update 方法将 DataTable 更新到数据库中
     sda.Update(dt);
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
     //在 dataGridView1 控件的 CellClick 事件中实现单击某条数据显示详细信息
     txtNo.Text= dataGridView1.SelectedCells[0].Value.ToString();
     txtName.Text = dateGridView1.SelectedCells[1].Value.ToString(); 
     txtSex.Text = dataGridView1.SelectedCells[2].Value.ToString();
     txtAge.Text = dataGridView1.SelectedCells[3].Value.ToString(); 
     txtJJ.Text = dataGridView1.SelectedCells[4].Value.ToString();
}

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

C# 数据适配器之 DataAdapter 对象_第12张图片

                           图2  更新数据源

注意

在 DataTable 对象上可以多次使用 Fill 方法,如果主键存在,则传入行会与已有的匹配行合并;如果主键不存在,则传入行会追加到 DataTable 中。

往期推荐

  •   C#  分部类                   

  •   C#  类型转换

  •   C#  迭代器

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

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

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

C# 数据适配器之 DataAdapter 对象_第13张图片

Love life,love yourself

关注小编不迷路呦~

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

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