Trick: 巧用.NET Reflection从SqlConnection回溯到打开着的SqlDataReader
相信使用过ADO.NET的同志多半都见过这个exception吧: There is already an open DataReader associated with this Command which must be closed first. 抛出这个exception的主要原因是:一个SqlConnection只能和一个开着的SqlDataReader相关联。当开 发人员忘记关掉打开的SqlDataReader,而又尝试打开一个新的SqlDataReader的时候,BCL就会抛出上述 异常。重现方法如下:
这段代码很简单,我们一眼就能看出那个罪恶的DataReader。但是在实际的开发环境中,代码的封装 会造成当 SqlDataReader reader2 = cmd.ExecuteReader(); 抛出exception时,我们很难找到那个忘关 的DataReader。 下面,我将介绍一种方法,从SqlConnection回溯到打开着的SqlDataReader。 SqlConnection自身是没有任何public的方法可以返回当前打开着的SqlDataReader的,但是 SqlConnection却有一些internal method能帮助我们得到所要的信息。它们是: |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |