如何找到未封闭的DataReader?

时间:2011-03-10 14:27:46

标签: c# datareader

我在ASP.Net 1.1中维护了一个大型应用程序,该应用程序已被许多人(包括学生)修改过。显然,代码很少被审查,所以很多......错误...愚蠢的错误。最有问题的是从未关闭过的DataReader。 到处都是,每页最多十个。由于这个项目大约有一百页,容易有300多个类,所以我只是想到找到所有未封闭的DataReader而感到沮丧。

我知道这是没有希望的,但有没有一种简单的方法可以找到所有这些未封闭的DataReader?一些软件或visual studio 2003调整......

2 个答案:

答案 0 :(得分:3)

嗯,使用DataReader的“正确”方法是

using (SqlDataReader dr = ...) {
    ...
}

SqlDataReader dr = ...
try {
    ...
} finally {
    dr.Close();
}

因此,简单的解决方案就是对SqlDataReaderIDataReader进行全项目搜索。如果是

  • 不在使用条款或
  • 没有紧跟try

然后它很可能被错误地使用,需要修复。

请注意以下代码:

SqlDataReader dr = ...
...
// do something
...
dr.Close();

不正确,因为// do something期间抛出的异常会使DataReader保持打开状态。

答案 1 :(得分:1)

在“查找和替换”下尝试替换文件功能。使用正则表达式。

  1. {SqlDataReader.*}$替换为using(\1) \{
  2. 然后将using({using(.*)} \{替换为\1
  3. 编译并完成每个错误,只放置右大括号。
  4. 但请确保在开始之前备份文件。

    这样,您可以跳过那些已经有using块的人关闭数据阅读器。