网 络 公 告  

鹰是世界上寿命最长的鸟类,它一生的年龄可达70岁。要活那么长的寿命,它在40岁时必须做出困难却重要的决定。这时,它的喙变得又长又弯,几乎碰到胸脯;它的爪子开始老化,无法有效地捕捉猎物;它的羽毛长得又浓又厚,翅膀变得十分沉重,使得飞翔十分吃力。此时的鹰只有两种选择:要么等死,要么经过一个十分痛苦的更新过程——150天漫长的蜕变。它必须很努力地飞到山顶,在悬崖上筑巢,并停留在那里,不得飞翔。鹰首先用它的喙击打岩石,直到其完全脱落,然后静静地等待新的喙长出来。鹰会用新长出的喙把爪子上老化的趾甲一根一根拔掉,鲜血一滴滴洒落。当新的趾甲长出来后,鹰便用新的趾甲把身上的羽毛一根一根拔掉。5个月以后,新的羽毛长出来了,鹰重新开始飞翔,重新再度过30年的岁月!


时 间 记 忆

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


最 新 评 论

回复:生于80年代的回忆[转]
回复:asp.net 下怎样实现生成ht
回复:喜欢与爱的区别
回复:生于80年代的回忆[转]
回复:每日诵读的自我激励经典
回复:每日诵读的自我激励经典
回复:[转帖]卧薪尝胆三十年 中国终于找
回复:主力建仓后的操作手法
回复:KDJ指标的实战经验应用
回复:KDJ指标的实战经验应用


最 新 日 志

KDJ指标的实战经验应用
买卖技巧
冷笑话
炒股的精髓 多位高手多年股市心血结晶(荐
换个脸
巧妙破解Windows XP登陆口令
卖股时机的把握
利用成交量判断多头空头
主力建仓后的操作手法
每股净资产


留 言

         签写新留言

飘过!
传福音
re:cui_llc
又被打击了?
云南好玩么?
五一哪儿玩去?
一般
爽啊!!
呵呵
兜了一圈,啥都没赚到


友 情 连 接

           

pachong Blog

催雷   Blog

blog 信 息

blog名称:思考的大脑
日志总数:131
评论数量:269
留言数量:33
访问次数:587474
建立时间:2004年11月9日

 
 

[计算机技术]DataReader类用法
fredrj 发表于 2006/11/4 15:52:43

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); }

阅读全文(4901) | 回复(1) | 编辑 | 精华


回复:DataReader类用法
xcvsd(游客)发表评论于2006/11/15 16:40:19

不论你是否地道的高明人,或是异乡的高明人,只要你喜欢高明的话,多点上来玩玩,这里是你娱乐的好地方,更是交知心好友的好地方。多点来上高明论坛吧,是真正的高明人论坛!

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)

----------------------------------------------------------------------------------------------------------

 
部落窝模板世界部落窝模板
世界
站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.188 second(s), page refreshed 144752882 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号