关于应用程序池连接超时,数据库连接未及时关闭的系统报错, 以及该过程中使用DataSet和DataReader的区别

出现情况

我们在对数据库得操作过程中,如果频繁的操作DataReader对象且没有及时关闭数据库连接,就会出现“

超时时间已到。超时时间已到 但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用 并且达到了最大池大小。

”错误在操作DataReader时我们手动将其关闭

出现以下错误

问题解决方法:
我们在调用微软的数据库DBHelper时由于大量打开与数据库的连接并且未能及时关闭,导致数据库连接超时。
并附上一下内容:

ADO.NET2.0提供了两个用于检索关系数据的对象:DataSet和DataReader。并且这两个对象都可以将检索的关系数据存储在内存中。在软件开发过程中经常用到这两个对象,由于这两个对象在使用和功能方面的相似,很多程序员错误地认为DataSet和DataReader是可以相互替代的。这种想法是错误的,在这一小节将会讲到DataSet控件和DataReader控件的区别。

■与数据库连接

DatSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接。

Datareader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后有用户决定是否断开连接。

■    处理数据速度

DataSet读取、处理速度较慢。

DataReader读取、处理速度较快。

■    更新数据库

在对DataSet数据集中的数据进行更新后,可以把数据更新回原来的数据库。

在对DataReader中的数据进行更新后,没有办法进行数据库更新。

■    支持分页排序

在DataSet中支持分页、动态排序等操作。

在DataReader中没有分页、动态排序的功能。

■     占用内存

DataSet在 IIS 服务器上所使用的内存较多。

DataSet在 IIS 服务器上所使用的内存较少。

综上所述得出DataSet和DataReader有各自适用的场合。如果数据来源控件只是用来填入控件的清单成为其选项,或者数据绑定控件并不需要提供排序或分页功能的话,则应该使用 DataReader。反之,如果数据绑定控件需要提供排序或分页功能的话,则必须使用 DataSet,通过DataSet设置出来分页排序等页面面显示效果。