Как найти незамкнутый DataReader? - PullRequest
3 голосов
/ 10 марта 2011

Я поддерживаю большое приложение в ASP.Net 1.1, которое было изменено многими людьми (включая студентов).Очевидно, что код редко пересматривался, поэтому в нем много ... ошибочных ... глупых ошибок.Наиболее проблематичными являются никогда не закрываемый DataReader.И есть везде, до десяти на страницу.Поскольку этот проект насчитывает около ста страниц с более чем 300 классами, я просто разочаровался при мысли о том, чтобы найти все незамкнутые DataReader.

Я знаю, что это безнадежно, но есть ли простой способ найти все эти незакрытые DataReader?какая-то программа или визуальная студия 2003 твик ...

Ответы [ 2 ]

3 голосов
/ 10 марта 2011

Что ж, «правильный» способ использования DataReader - это

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

или

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

Итак, простое решение - просто выполнить полный проект для поискаSqlDataReader и IDataReader.Если это

  • не в предложении использования или
  • , за которым сразу не следует try

, то, скорее всего, оно используется неправильно и требуетисправлено.

Обратите внимание, что следующий код:

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

неверен, так как исключение, выданное во время // do something, оставит DataReader открытым.

1 голос
/ 10 марта 2011

Попробуйте заменить в файлах функции в разделе «Найти и заменить».Используйте регулярное выражение.

  1. Замените {SqlDataReader.*}$ на using(\1) \{.
  2. Затем замените using({using(.*)} \{ на \1.
  3. Скомпилируйте и выполните каждую ошибкуи поместите только закрывающие фигурные скобки.

Но убедитесь, что вы сделали резервные копии своих файлов перед началом.

Таким образом, вы можете пропустить те, которые уже имеютusing блок для закрытия считывателя данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...