C# 数据适配器之 DataAdapter 对象

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 数据适配器之 DataAdapter 对象相关的知识,希望对你有一定的参考价值。

01  DataAdapter 对象概述

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

   SelectCommand 属性:向数据库发送查询 SQL 语句。 

   DeleteCommand 属性:向数据库发送删除 SQL语句。 

   InsertCommand 属性:向数据库发送插入 SQL 语句。

   UpdateCommand 属性:向数据库发送更新 SQL 语句。

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

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

语法如下:

public int Fil(DataSet dataSet,string sreTable)

   dataSet:要用记录和架构(如果必要)填充的 DataSet。

   srcTable:用于表映射的源表的名称。

   返回值:已在 DataSet 中成功添加或刷新的行数,这不包括受不返回行的语句影响的行。

   说明

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

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

语法如下:

public int Update(DataTable dataTable)

   dataTable:用于更新数据源的 DataTable。

   返回值: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  所示。

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

                           图2  更新数据源

注意

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

往期推荐

Love life,love yourself

关注小编不迷路呦~

代码如下:

以上是关于C# 数据适配器之 DataAdapter 对象的主要内容,如果未能解决你的问题,请参考以下文章

哪位高手简洁分析下ADO.NET中的常用对象:DataAdapter、Command、DataSet的使用情况。。非常感谢!!

快速拥有各种数据访问SqlHelper

如何使用 DataAdapter.Update 方法同时更新 Access 数据库和 .NET DataSet 对象?

使用 C# dataAdapter.Fill() 和 dataAdapter.Update() 将表的数据从一个数据库传输到另一个数据库的同一个表

为啥当我调用 DataAdapter.Update() 时,此 C# 代码会生成语法错误?

C#.NET sqlDatabase CommandBuilder 和 DataAdapter:名称“适配器”在当前上下文中不存在