我有一个通用方法来调用 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,连接也没有关闭。第一次请求页面时,我可以很好地获取数据。重新加载时出现以下错误:
连接未关闭。连接的当前状态是打开的。说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.InvalidOperationException:连接未关闭。连接的当前状态是打开的。
源错误:
第 35 行:第 36 行:} 第 37 行:sql.Connection.Open(); 第 38 行:iReader = sql.ExecuteReader(CommandBehavior.CloseConnection); 第 39 行:sql.Dispose();
最后,如果我把 sql.Connection.Close(); 之前 sql.Dispose(); 我收到 iReader 不可读的错误,因为它已经关闭。
显然我错误地关闭了我的连接,有人能指出我正确的方向吗?