看到有帖子:DataReader的关闭问题疑惑篇 ,大伙对链接关闭问题看似比较迷惑,这里就给解说一下:
不管是啥xxDataReader,都是继承DataReader实现的,所以是有共性的,因此标题就以DataReader为题了。
情况一:DataReader 默认链接不关闭
示例代码:
结论是:
说明:默认无论是不是加System.Data.CommandBehavior.CloseCONnection,读取时数据库链接不会帮你关闭。
情况二:DataReader 链接已关闭
示例代码:[以下是原文的代码]
结果是:
情况:System.Data.CommandBehavior.CloseConnection加完之后,链接给你关闭了,为啥?看下面的分析原因。
三:分析原因
1:从前面的两个示例上看,区别是什么?
答:区别就在于一个只读数据,另一个绑定了数据列表控件。
2:为什么绑定了数据列表控件就会自动关闭链接?
答:这就涉及到数据控件绑定机制了,这里给大伙简单介绍一下:
A:要实现数据控件列表绑定,有一个接口是需要实现的:IEnumerable
B:实现DataReader实现此接口的代码[基类是抽象方法,所以只能到子类SqlDataReader查看]:
从这代码里,我们只看到了它把CloseConnection传进DbEnumerator里了,再进去看一下:

点进去只看到构造函数,并把它赋给this.closeReader属性,因为DataReader是向前读方式,所以重点还是要看其中的一个方法MoveNext:
以上代码就看我注释的说明。
C:为什么用DataReader绑定列表控件是耍流氓?
答:因为服务端控件列表渲染出表格的周期通常比较长,所以,只有等到你看到最后结果列表出来的时候,最后一行数据才读完。
因此链接是持续相当长的处于打开状态,所以WEB这种并发多的情况,狂点几下,估计就报错了,链接池用满了。
四:最终结论是什么?
1:在绑定列表控件时,只要数据行读取完毕,就会自动关闭链接。
2:在直接读取时,不会触发绑定相关的读取,所以不会自动关闭链接。
3:在绑定列表控件时,链接长期得不到关闭,并发一来,就挂了,因此大伙就不要耍流氓了。
原文链接:
为什么一运行,就说datareader对象必须要先关闭
你打开了datareader,运行完了之后肯定要关闭datareader呀我估计是你还有其他的地方使用到了datareader,但是你用完之后并未关闭,所以这里是执行不了的。 你找到你所有用datareader的地方,在程序的后面加上();就可以了。 If = True = delete from papers where Sno= + + ()MsgBox(删除成功!)()ElseMsgBox(无此学生论文记录!)()End If
急!关于C#中dataset和sqldataadapter
SqlDataReader是个数据读取器,向前不可后退、每次只读取一条。 速度快,现代项目里面用它用得最多。 DataSet是个内存数据库,它与其它两个是根本不一样的。 SqlDataAdapter是个数据适配器,工作于DataSet和数据库之间,负责将数据从数据源读出来放在DataSet中,或将DataSet中的更改更新回数据库。 .性能。 DataSet中的数据完全保存在内存中,所以会占用内存。 但是通常情况下DataReader读出的数据实例化以后也是在内存中的,所以两者没有多大区别。 但是,当数据量极大的情况下,使用DataSet时,不论是你分页还是不分页,它的效率之低,和SqlDataReader相比都是不可同日而语的,尤其是你在分页情况下,使用DataReader可以只读所需数据,网络流量可以很小,但是DataAdapter还是必须全部读出,网络流量你很难优化,除非你自己去深入控制。 2.方便。 DataSet数据保存在内存中,可以用Adapter一次性填充,乍看方便不少,其实不然。 由于dataset中的数据都是弱类型的,你用的时候不得不大量使用索引、强制类型转换、类型转换来完成读取任务,麻烦而且易错。 从这方便来说,在读取数据时那么一点方便是不可取的。 3.离线。 DataSet是离线的,数据读取后可以关闭数据库连接,但是DataReader则必须在使用数据的时候一直连接数据库。 现在的项目中大多使用实体(Entity)来保存从DataReader中读取的数据,也能实现离线的目的,虽然麻烦一点,但是后期很方便使用。
设计个留言网页,怎么添加ACCESS数据库?
留言表字段安排是:
id:用来标识留言,自动编号
up_id:用来标识是留言还是回复,如果是留言就是0,如果是回复就是所回复留言的ID,字段类型为数字,默认值是0
ly_name:留言人姓名,文本
ly_lr:留言内容,备注
ly_ip:留言者IP,文本
发表评论