'ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения открыто
Довольно большое веб-приложение, написанное на C #, выдает 2 ошибки:
'ExecuteReader требует открытого и доступного соединения. Текущее состояние соединения открыто. ' и 'Недопустимая попытка вызвать Read, когда читатель закрыт.'
Эти ошибки были спорадическими - страницы обычно загружались нормально в 95% случаев, но в последнее время они стали повсеместными, они происходят постоянно и в основном наносят ущерб функциональности приложения.
Веб-приложение сильно зависит от базы данных MS SQL, и ошибки, по-видимому, не ограничиваются одной страницей, а почти всеми страницами, которые подключаются к базе данных.
Запросы выполняются так:
Database.Open(); // Custom class that has our connection string hard coded.
string query = "SELECT * FROM table"; // (dummy query)
SqlCommand command = new SqlCommand(query, Database.Conn);
SqlDataReader reader = null;
try {
reader = command.ExecuteReader(CommandBehaviour.CloseConnection);
if (reader.HasRows) {
while (reader.Read()) {
// Do something with the data.
}
}
reader.Close();
}
catch (Exception e) {
throw new Exception(e.Message);
}
finally {
if (reader != null) {
reader.Close();
}
}
Я исследовал эти ошибки в Интернете и увидел несколько потенциальных решений, которые я пытался безрезультатно:
Помещение различных частей кода в блок using (). Указание CommandBehaviour.CloseConnection для читателя. Проверка того, что MARS включен. Обеспечение того, чтобы каждый раз создавался новый объект подключения.
Я потратил целые годы на поиски решений этой проблемы, не говоря уже о том, что долго пытался заставить ее работать, и я почти на грани того, чтобы вырвать мои волосы прямо сейчас!
Пожалуйста помоги!
РЕДАКТИРОВАТЬ - Исправлена проблема, см. Раздел комментариев.