C# 数据适配器之 DataAdapter 对象

01  DataAdapter 对象概述

6764eb34d7f641b1a9d722f01488abc1.png

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

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

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

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

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

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

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

语法如下:

public int Fil(DataSet dataSet,string sreTable)

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

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

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

   说明

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

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

语法如下:

public int Update(DataTable dataTable)

7212961fca607dd9d69c789c447b9ba6.png   dataTable:用于更新数据源的 DataTable。

fc88d642cdfce53f35b61aec87c35f2e.png   返回值: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 变量 connconn = 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  所示。

43b845ccbbb49ca5712cb8e3d80b0759.png

          图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"];               //创建一个 DataTablesda.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();  //实例化一个 SqLCommandBuilderSqlCommandBuilder 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 所示 。

a7210209547a2412f9123f897b4107cd.png

                           图2  更新数据源

注意

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

往期推荐

  •   C#  分部类                   

  •   C#  类型转换

  •   C#  迭代器

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

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

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

8672356637a91eba3eb5268001f398d2.png

Love life,love yourself

关注小编不迷路呦~

代码如下:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

express 4 简单实现自动注册路由功能

为什么80%的码农都做不了架构师?>>> ##实现 在express,模块的lib/router/index.js 的 proto.route 方法定义附件添加代码,实现自动注册路由方法: var fs require("fs"); var Path require("path&quo…

速战速决?你不会是不行吧......

1 真服了!!▼2 同猫不同命......▼3 无锡:??▼4 还是黄金好?▼5 你会不会是不行??▼6 爸爸:那也太惊喜了...▼7 倒是毫无违和感?▼8 皇上您说的对&…

mysql普通标转分区表_MySQL分区表到普通表互转

由于最近总有人抱怨,数据迁移后执行SQL变慢,经过查看原来是分区导致的问题。原分区根据按月设置RANGE分区,看到这图的时候也许有人就会发现问题.......业务查询SQL:从SQL上看 执行计划确实是走了分区,但为什么没有命中…

c++标准库中,含有链表的类list

Lists将元素按顺序储存在链表中. 与 向量(vectors)相比, 它允许快速的插入和删除,但是随机访问却比较慢.STL中 end()指向的总是无效值,取值都用迭代器,用法跟指针差不多。assign() 给list赋值 back() 返回最后一个元素 begin() 返回指向第一个…

读懂路由表

教你读懂路由表源码:--------------------------------------------------------------------------------Active Routes: Network Destination Netmask Gateway Interface Metric 0.0.0.0 0.0.0.0 192.16…

C# 用IrisSkin4.dll美化你的WinForm

1. 将IrisSkin4.dll动态文件导入当前项目引用中。具体操作为:解决方案资源管理器->当前项目->引用->右键->添加引用,找到IrisSkin4.dll文件,然后加入即可。建议,最好把IrisSkin4.dll文件放在当前项目\bin\Debug文件中…

SpringMVC中的文件上传

这是用的是SpringMVC-3.1.1、commons-fileupload-1.2.2和io-2.0.1 web.xml文件 <?xml version"1.0" encoding"UTF-8"?> <web-app version"2.5" xmlns"http://java.sun.com/xml/ns/javaee" xmlns:xsi"http://www.w3.o…

JavaScript对象、JSON对象、JSON字符串的区别

一、首先看下什么是JSON JSON&#xff1a;JavaScript Object Natation&#xff0c;JavaScript对象的表现形式&#xff0c;已经发展成一种轻量级的数据交换格式。 JavaScript对象的表现形式&#xff0c;指定义JS对象的一种方式。数据交换格式&#xff0c;即用于交换的数据格式。…

全球最大油田、金矿、煤矿、铁矿、铜矿,究竟哪个最值钱?

全世界只有3.14 % 的人关注了爆炸吧知识1世界上最大油田&#xff1a;沙特加瓦尔油田&#xff08;Ghawar Oil field&#xff09;加瓦尔油田位于沙特阿拉伯东部&#xff0c;首都利雅得以东约500km处&#xff0c;它探明的石油可采储量为114.8亿吨&#xff0c;天然气储量9240亿立方…

JavaScript自动设置IFrame高度(兼容各主流浏览器)

调用方式如下 <iframe id"ifm" name"ifm" οnlοad"SetIFrameHeight(ifm)" src"http://www.qq.com" /> function SetIFrameHeight(down) {var Sys {};var ua navigator.userAgent.toLowerCase();var s;(s ua.match(/msie ([\…

MVC3快速搭建Web应用(二)

easyui与mvc的结合 上一篇文章发布后&#xff0c;自己又仔细读了数遍&#xff0c;感觉一是文笔太差&#xff0c;二是描述逻辑比较混乱&#xff0c;客观原因是涉及到东西其实蛮多的&#xff0c;那三个步骤不可能在一篇短短的文章中就可以描述清楚。此篇笔者将尽量更加详尽一些。…

如何通过 .NETCore 获取 Linux,Mac 的硬件信息?

咨询区 Pascal Jackson&#xff1a;请问我如何通过 .NET Core 去识别 Linux/Mac 电脑上的硬件信息&#xff1f;在 windows 上我可以通过 System.Management 下 WMI Query 很容易获取&#xff0c;比如下面的代码&#xff1a;ManagementObjectSearcher searcher new ManagementO…

KVM 虚拟机自动克隆脚本

#!/bin/sh#----------------------------------## virt-clone auto script[虚拟机自动克隆脚本]# create by xuekun# date 2015-12-26# 开源人#----------------------------------## Source function library.. /etc/rc.d/init.d/functions#SOUR_SERVER$1DIRE_SERVER$2IP_ADDR…

SpringMVC整合Shiro

这里用的是SpringMVC-3.2.4和Shiro-1.2.2&#xff0c;示例代码如下 首先是web.xml <?xml version"1.0" encoding"UTF-8"?> <web-app version"2.5"xmlns"http://java.sun.com/xml/ns/javaee"xmlns:xsi"http://www.w3.o…

这个发热鞋垫厉害了,有它冬天再也不怕脚冷

▲ 点击查看冬天一到&#xff0c;小爆发现身边的“抖友”又开始上线了&#xff01;至于为什么会抖脚&#xff1f;有盆友说&#xff0c;当然不是真的想抖&#xff0c;而是因为脚太冷冷冷了&#xff01;有时候穿了棉袜厚鞋&#xff0c;脚都是冷冰冰的&#xff0c;感觉就像踩在冰窟…

.NET 6新特性试用 | 热重载

前言在以前的开发模式下&#xff0c;我们修改代码后必须重新编译、重新运行才能看到效果。而热重载提供了这样一种特性&#xff0c;它允许你在项目正在运行时修改代码&#xff0c;并将代码更改立即应用于正在运行的应用程序上。热重载的目的是尽可能节省编辑之间的应用重启次数…

加速你的Hibernate引擎(上)

为什么80%的码农都做不了架构师&#xff1f;>>> 1.引言 Hibernate是最流行的对象关系映射&#xff08;ORM&#xff09;引擎之一&#xff0c;它提供了数据持久化和查询服务。 在你的项目中引入Hibernate并让它跑起来是很容易的。但是&#xff0c;要让它跑得好却是需…

WSUS服务器的建立以及客户端发布

http://yuelei.blog.51cto.com/202879/81676转载于:https://blog.51cto.com/439810/909642

Spring MVC 中 HandlerInterceptorAdapter过滤器的使用

一般情况下&#xff0c;对来自浏览器的请求的拦截&#xff0c;是利用Filter实现的&#xff0c;这种方式可以实现Bean预处理、后处理。 Spring MVC的拦截器不仅可实现Filter的所有功能&#xff0c;还可以更精确的控制拦截精度。 Spring为我们提供了org.springframework.web.s…

7部必看的纪录片,每一部都堪称经典,让人叹为观止!

全世界只有3.14 % 的人关注了爆炸吧知识纪录片的一大重要意义&#xff0c;就在于它能将我们的视野和脚步&#xff0c;引向我们无法企及的地方和领域&#xff0c;又能让那些我们曾经到过的地方、经历过的人事&#xff0c;变得更有深意。今天&#xff0c;就给大家分享7部顶级纪录…