第十五讲 DataAdapter对象教学目的:
一、复习 DataReader对象的相关内容二、掌握 DataAdapter对象的属性和方法教学重点:
一、理解 DataAdapter对象的主要作用二,DataAdapter对象的属性方法应用三、掌握离线数据操作的方法一,DataAdapter对象概述
DataAdapter(即数据适配器)对象是一种用来 充当 DataSet对象与实际数据源之间桥梁的对象。 DataSet对象是一个非连接的对象,它与数据源无关。而 DataAdapter则正好负责填充它并把它的数据提交给一个特定的数据源,它与 DataSet配合使用,可以执行新增、查询、修改和删除等多种操作。
DataAdapter对象是一个 双向通道,用来把数据从数据源中读到一个内存表中,以及把内存中的数据写回到一个数据源中。两种情况下使用的数据源可能相同,也可能不相同。而这两种操作分别称作填充
( FILL)和更新( UPDATE)。
当 SqlDataAdapter对象通过 FILL方法填充
DataSet对象时,它为返回的数据创建必需的表和列(如果这些表和列尚不存在)。
也可以使用 FillSchema方法,让
SqlDataAdapter对象创建 DataSet对象的架构,并在用数据填充它之前就将主键信息包括进去。
注意:
Fill方法的返回值为整型的(具体的行数)
二,DataAdapter对象的属性和方法
DataAdapter对象的常用属性及说明
DeleteCommand,获取或设置一个语句或存储过程,以从数据集删除记录
InsertCommand,获取或设置一个语句或存储过程,以在数据源中插入新记录
SelectCommand,获取或设置一个语句或存储过程,用于在数据源中选择记录
UpdateCommand,获取或设置一个语句或存储过程,用于更新数据源中的记录
UpdateBatchSize:获取或设置每次到服务器的往返过程中处理的行数
例如,以下代码能给 DataAdapter对象的
selectCommand属性赋值。
//连接字符串
SqlConnection conn;
//创建连接对象 conn的语句
// 创建 DataAdapter对象
SqlDataAdapter da = new SqlDataAdapter;
//给 DataAdapter对象的 SelectCommand属性赋值
Da.SelectCommand = new SqlCommand("select
* from user",conn);
//后继代码
同样,可以使用上述方式给其他的
InsertCommand,DeleteCommand和
UpdateCommand 属性赋值。
★★ 对 InsertCommand,DeleteCommand和
UpdateCommand 属性赋值的说明:
共有两种方法解决该问题:
1、使用 CommandBuilder对象 来自动为这个
DataAdapter对象隐形地生成其他 3个
InsertCommand,DeleteCommand和
UpdateCommand 属性。
SqlCommandBuilder cb = new
SqlCommandBuilder(da);
2、分别创建与该属性向对应的
InsertCommand\DeleteCommand和 UpdateCommand
对象,创建方法和创建普通 Command对象的方法相同。
当在代码里使用 DataAdapter对象的
SelectCommand属性获得数据表的连接数据时,
如果表中数据有主键,就可以使用
CommandBuilder对象 来自动为这个 DataAdapter
对象隐形地生成其他 3个 InsertCommand、
DeleteCommand和 UpdateCommand 属性。这样,
在修改数据后,就可以直接调用 Update方法将修改后的数据更新到数据库中,而不必再使用
InsertCommand,DeleteCommand和
UpdateCommand这 3个属性来执行更新操作。
DataAdapter对象的方法
Dispose:删除该对象
Fill,用从源数据读取的数据行填充至
DataSet对象中
FillSchema:将一个 DataTable加入到指定的 DataSet中,并配置表的模式
GetFillParameters:返回一个用于 SELECT
命令的 DataParameter对象组成的数组
Update:在 DataSet对象中的数据有所改动后更新数据源。
Fill方法
当调用 Fill 方法时,它将向数据存储区传输一条 SQL SELECT 语句。该方法主要用来填充或刷新 DataSet,返回值是影响
DataSet的行数。
格式:
Fill (数据集,表名 )
//数据库名为 stu,用户名为 sa,用户密码为空
SqlConnection con=new
SqlConnection("server=(local);uid=sa;
pwd=;database=stu");
Con.Open();//打开数据库连接
SqlDataAdapter sda=new
SqlDataAdapter("select * from
student");//查询 student表
DataSet ds=new DataSet();
Sda.Fill(ds,"student");//填充数据集
Update()方法
当程序调用 Update 方法时,DataAdapter
将检查参数 DataSet每一行的 RowState属性,
根据 RowState属性来检查 DataSet里的每行是否改变和改变的类型,并依次执行所需的 INSERT,UPDATE或 DELETE 语句,将改变提交到数据库中。 这个方法返回影响
DataSet的行数。
即将数据集中的改变返回到数据源中 !
更准确地说,Update 方法会将更改解析回数据源,但自上次填充 DataSet 以来,其他客户端可能已修改了数据源中的数据。
若要使用当前数据刷新 DataSet,应使用
DataAdapter 和 Fill 方法。
DataAdapter对象代码示例
下面的代码将说明如何利用 DataAdapter对象填充
DataSet对象。
private static string strConnect = "data source=localhost;
uid=sa;pwd=aspnet;database=LOGINDB"
string sqlStr =" Select * from USER";
//利用构造函数,创建 DataAdapter
SqlDataAdapter da = new
SqlDataAdapter(sqlStr,strConnect);
//创建 DataSet
DataSet ds = new DataSet();
//填充,第一个参数是要填充的 dataset对象,第二个参数是填充 dataset的 datatable
Da.Fill(ds,"USER");
上述代码使用 DataApater对象填充 DataSet对象的步骤如下。
(1) 根据连接字符串和 SQL语句,创建一个
SqlDataAdapter对象。 这里,虽然没有出现 Connection
和 Command对象的控制语句,但是 SqlDataAdapter对象会在创建的时候,自动构造对应的 SqlConnection和
SqlCommand对象,同时根据连接字符串自动初始化连接。要注意的是,此时 SqlConnection和 SqlCommand对象都处于关闭状态。
(2) 创建 DataSet对象,该对象需要用 DataAdapter填充。
(3) 调用 DataAdapter的 Fill方法,通过 DataTable填充
DataSet对象。由于跟随 DataAdapter对象创建的
Command里的 SQL语句是访问数据库里的 USER表,所以在调用 Fill方法的时候,在打开对应的 SqlConnection和
SqlCommand对象后,会用 USER表的数据填充创建一个名为 USER的 DataTable对象,再用该 DataTable填充到
DataSet中。
下面的代码演示了如何使用 DataAdapter对象将 DataSet中的数据更新到数据库。
private static string strConnect = "data source=localhost;
uid=sa;pwd=aspnet;database=LOGINDB"
string sqlStr = "Select * from USER";
//利用构造函数,创建 DataAdapter
SqlDataAdapter da = new SqlDataAdapter(sqlStr,strConnect);
//创建 DataSet
DataSet ds = new DataSet();
//填充,第一个参数是要填充的 dataset对象,第二个参数是填充 dataset的
datatable
Da.Fill(ds,"USER");
//以下代码将更新 DataSet里的数据
//在 DataSet里的名为 "USER"的 DataTable里添加一个用于描述行记录的
DataRow对象
DataRow dr = ds.Tables["USER"].NewRow();
//通过 DataRow对象添加一条记录
dr["USERID"] = "ID2";
dr["USERNAME"] = "TOM";
ds.Table["USER"].Rows.Add(dr);
//更新到数据库里
SqlCommandBuilder scb = new SqlCommandBuilder(da);
da.update(ds,"USER");
在上述代码里,首先使用 DataAdapter填充
DataSet对象,然后通过 DataRow对象,向
DataSet添加一条记录,最后使用
DataAdapter对象的 update方法将添加的记录提交到数据库中。执行完 update语句,
数据库 USER中就多了一条 USERID是 ID2、
USERNAME是 TOM的记录。
此外,上述代码出现的 SqlCommandBuilder
对象用来对数据表进行操作。用了这个对象,就不必再繁琐地使用 DataAdapter的
UpdataCommand属性来执行更新操作。
总结:
一、查询操作的一般步骤
1、创建连接对象
2、创建命令对象
3、设置命令对象的 Connection和
CommandText属性
4、创建数据适配器对象
5、将数据适配器的 SelectCommand属性和
Command对象相关联
6、调用 Fill()方法对该方法的返回值进行判断二、更新、插入、修改操作的一般步骤
1、创建连接对象
2、创建命令对象
3、设置命令对象的 Connection和
CommandText属性
4、调用命令对象的 ExecuteNonQury方法或修改相应数据项的值,然后创建
CommandBuilder对象,最后 调用 DA的 Update
方法更新数据源。