У меня есть универсальный метод для вызова хранимой процедуры в ASP.NET:
public SqlDataReader ExecuteStoredProc(string sprocName, SqlParameter[] SqlP)
{
SqlDataReader iReader;
SqlCommand sql = new SqlCommand();
sql.CommandText = sprocName;
sql.CommandType = CommandType.StoredProcedure;
sql.Connection = ConnStr;
if (SqlP != null)
{
foreach (SqlParameter p in SqlP)
{
sql.Parameters.Add(p);
}
}
sql.Connection.Open();
iReader = sql.ExecuteReader(CommandBehavior.CloseConnection);
sql.Dispose();
return iReader;
}
Несмотря на то, что я вызываю CommandBehavior.CloseConnection, соединение не закрывается. Я могу получить данные в порядке при первом запросе страницы. При перезагрузке я получаю следующую ошибку:
Соединение не было закрыто.
текущее состояние соединения открыто.
Описание: необработанное исключение
произошло во время исполнения
текущий веб-запрос. Пожалуйста, просмотрите
трассировка стека для получения дополнительной информации о
ошибка и откуда она возникла
код.
Сведения об исключении:
System.InvalidOperationException:
соединение не было закрыто.
текущее состояние соединения открыто.
Ошибка источника:
Строка 35: Строка 36:} Строка
37: sql.Connection.Open ();
Строка 38: iReader =
sql.ExecuteReader (CommandBehavior.CloseConnection);
Строка 39: sql.Dispose ();
Наконец, если я поставлю sql.Connection.Close (); перед sql.Dispose (); Я получаю сообщение об ошибке, что iReader не читается, потому что он уже закрыт.
Очевидно, что я неправильно закрываю соединение, может кто-то направить меня в правильном направлении?