网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 大学论文导航 设计下载 最新论文 下载排行 原创论文 论文源代码
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > ASP.net > 正文

ado.net详细研究(2)

来源:http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 14/02/27

文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。网学的各位小编整理了ASP.net-ado.net详细研究(2)的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!


  DataReader类 

1. 创建DataReader对象 

前面提到过没有构造函数创建DataReader对象。通常我们使用Command类的ExecuteRader方法来创建DataReader对象: 

SqlCommand cmd = new SqlCommand(commandText,ConnectionObject) 
SqlDataReader dr = cmd.ExecuteReader(); 

DataReader类最常见的用法就是检索Sql查询或者存储过程返回的记录。它是连接的只向前和只读的结果集,也就是使用它时,数据库连接必须保持打开状态,另外只能从前往后遍历信息,不能中途停下修改数据。 

注意:DataReader使用底层的连接,连接是它专有的,这意味这DataReader打开时不能使用对应连接进行去他操作,比如执行另外的命令等。使用完DataReader后一定记得关闭阅读器和连接。 

2. 使用命令行为指定DataReader的特征 

前面我们使用cmd.ExecuteReader()实例化DataReader对象,其实这个方法有重载版本,接受命令行参数,这些参数应该时Commandbehavior枚举: 

SqlDataRader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 

上面我们使用的是CommandBehavior.CloseConnection,作用是关闭DataReader的时候自动关闭对应的ConnectionObject。这样可以避免我们忘记关闭DataReader对象以后关闭Connection对象。别告诉我你不喜欢这个参数,你能保证你记得关闭连接。万一你忘记了呢?又或者你使用你的partner开发的组件来进行开发呢?这个组件并不一定让你有关闭连接的权限哦。另外CommandBehavior.SingleRow可以使结果集返回单个行,CommandBehavior.SingleResult返回结果为多个结果集的第一个结果集。当然Commandbehavior枚举还有其他值,请参见msdn。 

3. 遍历DataReader中的记录 

当ExecuteReader方法分会DataReader对象时,当前光标的位置时第一条记录的前面。必须调用数据阅读器的Read方法把光标移动到第一条记录,然后第一条记录就是当前记录。如果阅读器包含的记录不止一条,Read方法返回一个bool值true。也就是说Read方法的作用是在允许范围内移动光标位置到下一记录,有点类似rs.movenext,不是吗?如果当前光标指示着最后一条记录,此时调用Read方法得到false。我们经常这样做: 

While(dr.Reader()) 



//do something with the current record 



注意,如果你对每一条记录的操作可能花费比较长的时间,那么意味着阅读器将长时间打开,那么数据库连接也将维持长时间的打开状态。此时使用非连接的DataSet或许更好一些。 

4. 访问字段的值 

有2种方法。第一种是Item属性,此属性返回字段索引或者字段名字对应的字段的值。第二种是Get方法,此方法返回有字段索引指定的字段的值。有点难以理解,不是吗?不要紧,看例子就OK了。 

Item属性 

每个DataReader类都定义一个Item属性。比如现在我们有一个DataReader实例dr,对应的sql语句是select Fid,Fname from friend,则我们可以使用下面的方法取得返回的值: 

object ID = dr[“Fid”]; 

object Name = dr[“Fname”]; 

或者: 

object ID = dr[0]; 

object Name = dr[0]; 

注意索引总是从0开始的。另外也许您发现了我们使用的是object来定义对ID和Name,是的,Item属性返回的值是object型,但是您可以强制类型转换。 

int ID = (int)dr[“Fid”]; 

string Name = (string)dr[“Fname”]; 

记住:确保类型转换的有效性是您自己的责任,否则您将得到异常。 

Get方法 

起始我们在第一篇文章里面已经使用过改方法了。每个DataReader都定义了一组Get方法,比如GetInt32方法把返回的字段值作为.net clr 32位证书。同上面的例子一样我们用如下方式访问Fid和Fname的值: 

int ID = dr.GetInt32(0); 

string Name = dr.GetString(1); 

注意虽然这些方法把数据从数据源类型转化为.net数据类型,但是他们不执行其他的数据转换,比如他们不会把16位整数转换为32位的。所以您必须使用正确的Get方法。另外Get方法不能使用字段名来访问字段,也就是说上面的没有: 

int ID = dr.GetInt32(“Fid”); //错误 

string Name = dr.GetString(“Fname”); //错误 

显然上面这个缺点在某些场合是致命的,当你的字段很多的时候,或者说你过了一段时间以后再来看你这些代码,你会觉得很难以理解!当然我们可以使用其他方法来尽量解决这个问题。一个可行的办法是使用const: 

const int FidIndex = 0; 

const int NameIndex = 1; 

int ID = dr.GetInt32(FidIndex); 

string Name = dr.GetString(NameIndex); 

这个办法并不怎么好,另外一个好一些的办法: 

int NameIndex = dr.GetOrdinal(“Fname”); //取得Fname对应的索引值 

string Name = dr.GetString(NameIndex); 

这样似乎有点麻烦,但是当须要遍历阅读器种大量的结果集的时候,这个方法很有效,因为索引只需执行一次。 

int FidIndex = dr.GetOrdinal(“Fid”); 

int NameIndex = dr.GetOrdinal(“Fname”); 

while(dr.Read()) 



int ID = dr.GetInt32(FidIndex); 

string Name = dr.GetInt32(NameIndex); 





到目前为止,我们已经讨论了DataReader的基本操作了。至于DataReader的有些高级超作我们以后再讨论。 

下次我们构建一个项目——个人通讯录(单用户版本)。在这个项目中我们将用到前面讨论的所有知识,同时在这个项目里面我将尽量是这个项目符合多层体系结构标准。
  • 上一篇资讯: ADO.NET详细研究(3)
  • 下一篇资讯: ado.net详细研究(1)
  • 网学推荐

    免费论文

    原创论文

    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号