DataAdapter对象

DataAdapter对象主要用来承接Connection和DataSet对象。

DataSet对象只关心访问操作数据,而不关心自身包含的数据信息来自哪个Connection连接到的数据源,

而Connection对象只负责数据库连接而不关心结果集的表示。

所以,在ASP.NET的架构中使用DataAdapter对象来连接Connection和DataSet对象。

另外,DataAdapter对象能根据数据库里的表的字段结构,动态地塑造DataSet对象的数据结构。

DataAdapter对象的常用属性

DataAdapter对象的工作步骤一般有两种,

一种是通过Command对象执行SQL语句,将获得的结果集填充到DataSet对象中;

另一种是将DataSet里更新数据的结果返回到数据库中。

DataAdapter对象的常用属性形式为XXXCommand,用于描述和设置操作数据库。

使用DataAdapter对象,可以读取、添加、更新和删除数据源中的记录。

对于每种操作的执行方式,适配器支持以下4个属性,类型都是Command,分别用来管理数据操作的“增”、“删”、 “改”、“查”动作。

SelectCommand属性:该属性用来从数据库中检索数据。

InsertCommand属性:该属性用来向数据库中插入数据。

DeleteCommand属性:该属性用来删除数据库里的数据。

UpdateCommand属性:该属性用来更新数据库里的数据。

例如,以下代码能给DataAdapter对象的selectCommand属性赋值。

//连接字符串

SqlConnection conn;

//创建连接对象conn语句

//创建DataAdapter 对象

SqlDataAdapter da=new SqlDataAdapter;

//给DataAdapter对象SelectCommand属性赋值

da.SelectCommand =new SqlCommand(" select * from user ", conn);

//后继代码

同样,可以使用上述方式给其他的InsertCommand、DeleteCommand和UpdateCommand属性赋值。

当在代码里使用DataAdapter对象的SelectCommand属性获得数据表的连接数据时,

如果表中数据有主键,就可以使用CommandBuilder对象来自动为这个DataAdapter对象隐形地生成其他3个InsertCommand、DeleteCommand和UpdateCommand属性。

这样,在修改数据后,就可以直接调用Update方法将修改后的数据更新到数据库中,而不必再使用InsertCommand、DeleteCommand和UpdateCommand这3个属性来执行更新操作。

DataAdapter对象的常用方法

DataAdapter对象主要用来把数据源的数据填充到DataSet中,以及把DataSet里的数据更新到数据库,同样有SqlDataAdapter和OleDbAdapter两种对象。

它的常用方法有构造函数、填充或刷新DataSet的方法、将DataSet中的数据更新到数据库里的方法和释放资源的方法。

    1.构造函数

不同类型的Provider使用不同的构造函数来完成DataAdapter对象的构造。对于SqlDataAdapter类,其构造函数说明如下表所示。

函数定义

参数说明

函数说明

SqlDataAdapter()

不带参数

创建SqlDataAdapter对象

SqlDataAdapter(SqlCommand selectCommand

selectCommand:指定新创建对象的SelectCommand属性

创建SqlDataAdapter对象。用参数selectCommand设置其Select Command属性

SqlDataAdapter(string selectCommandText, SqlConnection selectConnection)

selectCommandText:指定新创建对象的SelectCommand属性值

selectConnection:指定连接对象

创建SqlDataAdapter对象。用参数selectCommandText设置其Select Command属性值,并设置其连接对象是selectConnection

SqlDataAdapter(string   selectCommandText,String selectConnectionString

selectCommandText:指定新创建对象的SelectCommand属性值

selectConnectionString:指定新创建对象的连接字符串

创建SqlDataAdapter对象。将参数selectCommandText设置为Select Command属性值,其连接字符串是selectConnectionString

O1eDbDataAdapter的构造函数类似SqlDataAdapter的构造函数,如下表2所述。

函数定义

参数说明

函数说明

OleDbDataAdapter()

不带参数

创建OleDbDataAdapter对象

OleDbDataAdapter( OleDbCommand  selectCommand)

selectCommand:指定新创建对象的SelectCommand属性

创建OleDbDataAdapter对象。用参数selectCommand设置其SelectCommand属性

OleDbDataAdapter(string selectCommandText,

OleDbConnection  selectConnection)

selectCommandText: 指定新创建对象的SelectCommand属性值

selectConnection:指定连接对象

创建SqlDataAdapter对象。用参数selectCommandText设置其SelectCommand属性值,并设置其连接对象是selectConnection

OleDbDataAdapter(string selectCommandText,Stnng selectConnectionString)

selectCommandText:指定新创建对象的SelectCommand属性值

selectConnectionString:指定新创建对象的连接字符串

创建OleDbDataAdapter对象。将参数selectCommandText设置为SelectCommand属性值,其连接字符串是selectConnectionString

 

  

2.Fill类方法.

当调用Fill方法时,它将向数据存储区传输一条SQL SELECT语句。

该方法主要用来填充或刷新DataSet,返回值是影响DataSet的行数。

该方法的常用定义如表所示。

函数定义

参数说明

函数说明

int Fill(DataSet  dataset)

dataset:需要更新的DataSet

根据匹配的数据源,添加或更新参数所指定的DataSet,返回值是影响的行数

int Fill(DataSet dataset,

string srcTable)

dataset:需要更新的DataSet

srcTable:填充DataSet的dataTable名

根据dataTable名填充DataSet

3.int  Update(DaraSetdataSet)方法

当程序调用Update方法时,DataAdapter将检查参数DataSet每一行的RowState属性,根据RowState属性来检查DataSet里的每行是否改变和改变的类型,并依次执行所需的INSERT、UPDATE或DELETE语句,将改变提交到数据库中。

这个方法返回影响DataSet的行数。

更准确地说,Update方法会将更改解析回数据源,但自上次填充DataSet以来,其他客户端可能已修改了数据源中的数据。

若要使用当前数据刷新DataSet,应使用DataAdapter和Fill方法。

新行将添加到该表中,更新的信息将并入现有行。

Fill方法通过检查DataSet中行的主键值及SelectCommand返回的行来确定是要添加一个新行还是更新现有行。

如果Fill方法发现DataSet中某行的主键值与SelectCommand返回结果中某行的主键值相匹配,则它将用SelectCommand返回的行中的信息更新现有行,并将现有行的RowState设置为Unchanged。

如果SelectCommand返回的行所具有的主键值与DataSet中行的任何主键值都不匹配,则Fill方法将添加RowState为Unchanged的新行。

C#与数据库访问技术总结(十四)之DataAdapter对象的更多相关文章

  1. C#与数据库访问技术总结(十八)

    ADO.NET 代码综合示例 前面已经介绍过OLE DB.NET和SQL Server.NET数据提供者可以用来连接不同的数据源. 以下代码不仅综合演示了使用ADO.NET的这两种数据提供者访问数据库 ...

  2. C#-数据库访问技术 ado.net——创建 数据库连接类 与 数据库操作方法 以及简单的数据的添加、删除、修改、查看

    数据库访问技术 ado.net 将数据库中的数据,提取到内存中,展示给用户看还可以将内存中的数据写入数据库中去 并不是唯一的数据库访问技术,但是它是最底层的数据库访问技术 1.创建数据库,并设置主外键 ...

  3. C#与数据库访问技术总结(十六)之 DataSet对象

    DataSet对象 DataSet对象可以用来存储从数据库查询到的数据结果,由于它在获得数据或更新数据后立即与数据库断开,所以程序员能用此高效地访问和操作数据库. 并且,由于DataSet对象具有离线 ...

  4. C#与数据库访问技术总结(十五)之 DataAdapter对象代码示例

    DataAdapter对象代码示例 下面的代码将说明如何利用DataAdapter对象填充DataSet对象. private static string strConnect=" data ...

  5. c# 窗体开发4 数据库访问技术

    ADO.NET的名称起源于ADO(ACTIVEX DATA OBJECTS) USING SYSTEM; USING SYSTEM.COLLECTIONS.GENERIC; USING SYSTEM. ...

  6. 数据库访问技术 odbc dao rdo uda jet oledb

    一.UDA(UniversalDataAccess) 这是微软提供的通用数据访问策略.包括ADO.OLEDB和ODBC.它不光提供了数据库的访 问能力,对于其它的数据存储技术也同样支持,如目录服务.E ...

  7. C#与数据库访问技术总结(七)综合示例

    综合示例 说明:前面介绍了那么多,光说不练假把式,还是做个实例吧. 表:首先你要准备一张表,这个自己准备吧.我们以学生表为例. 1.ExecuteScalar方法 ExecuteScalar方法执行返 ...

  8. 数据库访问优化漏斗法则- 四、减少数据库服务器CPU运算

    数据库访问优化漏斗法则这个优化法则归纳为5个层次:1.减少数据访问次数(减少磁盘访问)2.返回更少数据(减少网络传输或磁盘访问)3.减少交互次数(减少网络传输)4.减少服务器CPU开销(减少CPU及内 ...

  9. C#与数据库访问技术总结(十七)

    使用DataSet对象访问数据库 当对DataSet对象进行操作时,DataSet对象会产生副本,所以对DataSet里的数据进行编辑操作不会直接对数据库产生影响,而是将DataRow的状态设置为ad ...

随机推荐

  1. Android_ADB 常用 shell命令 和 sqlite3 简单增删改查

    今天学习了一个ADB的常用命令.接下来简单使用几个常用ADB shell 命令. 首先我们得明白什么是adb.exe ADB -Android Debug Bridge, 是 Android sdk ...

  2. samba的简单用法总结

    前两天在弄LDAP+samba管理账号的东西,发现对samba的配置不太了解,就拿鸟哥的书看看,嘿嘿,结合自己的一些理解,记录下来. samba主要是实现windos可以共享Linux的东西 1:查看 ...

  3. java基础:熟悉3种内部类的写法,重点匿名内部类的使用

    一.内部类定义 内部类(nested classes),面向对象程序设计中,可以在一个类的内部定义另一个类.嵌套类分为两种,即静态嵌套类和非静态嵌套类.静态嵌套类使用很少,最重要的是非静态嵌套类,也即 ...

  4. Selenium2+python自动化6-八种元素元素定位(Firebug和firepath)

    前言 自动化只要掌握四步操作:获取元素,操作元素,获取返回结果,断言(返回结果与期望结果是否一致),最后自动出测试报告.本篇主要讲如何用firefox辅助工具进行元素定位. 元素定位在这四个环节中是至 ...

  5. SeleniumIDE初级入门

    Selenium  IDE:它是使用Javascript 脚本语言与CS端的DOM对象进行交互,并且为修改测试用例提供了接口.录制功能是它最大的亮点,录制功能可以让测试人员对需要进行测试的功能流程进行 ...

  6. GridView中DropDownList

    <asp:TemplateField HeaderText="下拉框"> <ItemTemplate> <cc1:MyDropDownList ID= ...

  7. 第一章 第一个spring boot程序(转载)

    第一章 第一个spring boot程序 本编博客转发自:http://www.cnblogs.com/java-zhao/p/5324185.html   环境: jdk:1.8.0_73 mave ...

  8. jzoj[1438]NOIP2013火柴排队

    读题: 相邻两个火柴可以交换?两个火柴序列?嗅到了归并排序的味道. 读完题目之后,我们可以知道,如果想要交换次数最少,可以先固定一个序列不变,比如说a序列不变,变b序列 样例是 4 2 3 1 4 3 ...

  9. AngularJs自定义指令详解(1) - restrict

    下面所有例子都使用angular-1.3.16.下载地址:http://cdn.bootcss.com/angular.js/1.3.16/angular.min.js 既然AngularJs快要发布 ...

  10. vim global命令

    global命令格式 : [range]global/{pattern}/{command} global命令在[range]指定的文本范围内(缺省为整个文件)查找{pattern},然后对匹配到的行 ...