大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 技术开发 -> NET专区 -> ado.net详细研究(三) —— DataReader(二)

ado.net详细研究(三) —— DataReader(二)

时间: 2021-07-31 作者:daque

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的有些高档超作咱们此后再计划。下次咱们建立一个名目——部分通信录(单用户本子)。在这个名目中咱们将用到前方计划的一切常识,同声在这个名目内里我将尽管是这个名目适合多层体制构造规范。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.