文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>ADO.Net学习笔记(3)--初识SqlDataAdapter

ADO.Net学习笔记(3)--初识SqlDataAdapter

时间:2011-02-21  来源:Green Billow

(一) SqlDataAdapter类剖析

SqlDataAdapter类由一系列子命令(即SqlCommand对象)和一组映射属性组成。

1.子命令

  在使用SqlDataAdapter查询数据并填充DataSet时,SqlDataAdapter使用SqlCommand和SqlConnection与数据库进行通信(SqlDataAdapter在内部使用SqlDataReader获取结果,并将该信息存储在DataSet的新行中)。

  SqlDataAdapter的子命令有:SelectCommand、UpdateCommand、InsertCommand、DeleteCommand。

2.TableMappings集合

 TableMappings决定了SqlDataAdapter的查询结果如何映射到DataSet中。TableMappings属性返回一个DataTableMapping对象的集合。每个DataTableMapping对象都存储了数据库的表(或视图或存储过程)到DataSet相应表的一个映射。

例如:

SqlDataAdapter da;

DataSet ds; 

da.TableMappings.Add("Table", "abc");

da.Fill(ds);

  因为da的查询结果默认表名为“Table”,如果da的TableMappings为空,那么da就默认与DataSet中名为“Table”的表进行通信。那么,da.Fill(ds)会填充DataSet中表名为“Table”的表。但是,加上da.TableMappings.Add("Table", "abc")后,da就知道要和DataSet中名为"abc"的表进行通信了,那么da.Fill(ds)会填充DataSet中表名为“abc”的表。另外,DataTableMapping类有一个ColumnMappings属性,其返回一个DataColumnMapping对象的集合。每个DataColumnMapping对象将数据库中的一列映射到DataSet中的一列。

  DataTableMapping , DataColumnMapping等映射类存在于System.Data.Common命名空间中。

(二) 创建SqlDataAdapter对象

.Net为SqlDataAdapter类提供了3个可用于简化创建过程的构造函数:

(1) SqlDataAdapter da = new SqlDataAdapter(strSQL, strConn);

strSQL是SQL选择语句,类型为string ;strConn是连接字符串,类型string。

注:这个构造函数有一个潜在缺陷。假如要创建同一连接的多个SqlDataAdapter对象,那么为每一个SqlDataAdapter对象都要创建一个新的

SqlConnection对象,这无疑是浪费系统资源的。

(2) SqlDataAdapter da = new SqlDataAdapter(strSQL, Conn);

strSQL是SQL选择语句,类型为string ;Conn是SqlConnection类型的对象。这个构造函数克服了(1)中的潜在缺陷。

(3) SqlDataAdapter da = new SqlDataAdapter(command);

command是SqlCommand类型的对象。

(三) 获取数据和更新数据

(1).Fill方法

  调用SqlDataAdapter对象的Fill方法会执行存储在SqlDataAdapter对象的SelectCommand属性中的查询,并将结果存储在DataSet或DataTable中。如果当前的SqlConnection对象还没有打开,调用Fill方法时会自动打开和关闭SqlConnection对象。所以不需要使用open方法打开连接和close方法关闭连接。但是这样也有一个缺陷,假如频繁地调用FIll方法,那么就会频繁地打开和关闭SqlConnection对象,这显然会影响程序的性能,为了避免这一缺陷,可以在调用Fill方法之前调用以Open方法,在连接使用结束后再调用一次Close方法,如以下代码:

conn.Open();

da1.Fill(ds);

da2.Fill(ds);

conn.Close();

Fill方法的重载有:

  1.Fill(ds) : ds是一个DataSet类型的对象;(注:如果da的TableMappings属性为空,则默认填充DataSet中名为“Table”的表)

  2.Fill(ds,tableName) : ds同上,tableName是要映射的表的名称;

  3.Fill(dt) : dt是一个DataTable类型的对象;

  4.Fill(ds,start,Num,tableName) : ds同上,start是要填充的记录的开始序号,Num是要填充的记录数量。比如,da查询结果含100个记录,那么da.Fill(ds,0,20,"abc") 就把da查询结果的前20条记录填充到ds中名为“abc”的表中。这一重载可用于查询结果的分页显示。

(2).Update方法   用CommandBuilder来生成更新的T-SQL命令。

  SqlDataAdapter的Update方法将DataSet中对应表的修改的部分保存到数据库中。这里需要注意,保存已经修改过的DataSet必须要具备有效的UpdateCommand ,否则会报错:“当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand”。 我们可以自己设置UpdateCommand属性,也可以使用SqlCommandBuilder ,在调用da的Update方法之前加上以下语句:SqlCommandBuilder CB = new SqlCommandBuilder(da);

Update方法的重载有:

  1.Update(dataRows) : dataRows是一个DataRow的数组;

  2. Update(ds) : ds是一个DataSet类型的对象;(注:如果da的TableMappings属性为空,那么这里默认使用名为“Table”的表进行更新,如果da中没有这一表,则会报错:Update 无法找到 TableMapping['Table'] 或 DataTable“Table”)

  3. Update(dt) : dt是一个DataTable类型的对象;

  4. Update(ds,talbeName) : ds同上,tableName是所要更新的表的名称。

相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载