我在ASP.Net 1.1中维护了一个大型应用程序,该应用程序已被许多人(包括学生)修改过。显然,代码很少被审查,所以很多......错误...愚蠢的错误。最有问题的是从未关闭过的DataReader。 到处都是,每页最多十个。由于这个项目大约有一百页,容易有300多个类,所以我只是想到找到所有未封闭的DataReader而感到沮丧。
我知道这是没有希望的,但有没有一种简单的方法可以找到所有这些未封闭的DataReader?一些软件或visual studio 2003调整......
答案 0 :(得分:3)
嗯,使用DataReader的“正确”方法是
using (SqlDataReader dr = ...) {
...
}
或
SqlDataReader dr = ...
try {
...
} finally {
dr.Close();
}
因此,简单的解决方案就是对SqlDataReader
和IDataReader
进行全项目搜索。如果是
try
然后它很可能被错误地使用,需要修复。
请注意以下代码:
SqlDataReader dr = ...
...
// do something
...
dr.Close();
不正确,因为// do something
期间抛出的异常会使DataReader保持打开状态。
答案 1 :(得分:1)
在“查找和替换”下尝试替换文件功能。使用正则表达式。
{SqlDataReader.*}$
替换为using(\1) \{
。using({using(.*)} \{
替换为\1
。但请确保在开始之前备份文件。
这样,您可以跳过那些已经有using
块的人关闭数据阅读器。