首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

?应用程序中的服务器异常

2013-02-17 
?应用程序中的服务器错误。应用程序中的服务器错误。已有打开的与此 Command 相关联的 DataReader,必须首先

?应用程序中的服务器错误。
应用程序中的服务器错误。

已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。

说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 

异常详细信息: System.InvalidOperationException: 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。

源错误: 

执行当前 Web 请求期间生成了未经处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

堆栈跟踪: 


[InvalidOperationException: 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。]
   System.Data.SqlClient.SqlInternalConnectionTds.ValidateConnectionForExecute(SqlCommand command) +5063487
   System.Data.SqlClient.SqlConnection.ValidateConnectionForExecute(String method, SqlCommand command) +22
   System.Data.SqlClient.SqlCommand.ValidateCommand(String method, Boolean async) +144
   System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) +105
   System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +137
   AHPDAL.DBHelper.Zengshangai(String sql, SqlParameter[] values) in E:\ahp2.0-3\AHPDAL\DBHelper.cs:51
   AHPDAL.QueAnsService.addQueAns(ItemQueAns itemQueAns) in E:\ahp2.0-3\AHPDAL\QueAnsService.cs:16
   AHPBLL.QueAnsManager.addQueAns(ItemQueAns itemQueAns) in E:\ahp2.0-3\AHPBLL\QueAnsManager.cs:16
   master_Default5.btnOk_Click(Object sender, EventArgs e) +1747
   System.Web.UI.WebControls.Button.OnClick(EventArgs e) +118
   System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +112
   System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +10
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +13
   System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +36
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +5563

-------------------------------------------------
下面是DBHelper内容:

public class DBHelper
    {
       private static string connStr = ConfigurationManager.ConnectionStrings["a"].ToString();
       private static SqlConnection conn;

        public static SqlConnection Conn
        {
            get
            {
                if (conn == null)
                {
                    conn = new SqlConnection(connStr);
                    conn.Open();
                }
                else if (conn.State == System.Data.ConnectionState.Broken)


                {
                    conn.Close();
                    conn.Open();
                }
                else if (conn.State == System.Data.ConnectionState.Closed)
                {
                    conn.Open();
                }
                else if (conn.State == System.Data.ConnectionState.Connecting)
                {
                    conn.Close();
                    conn.Dispose();
                    conn.Open();
                }
                return DBHelper.conn;
            }

        }

        public static int Zengshangai(string sql, params SqlParameter[] values)
        {
            SqlCommand comm = new SqlCommand(sql, Conn);
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.AddRange(values);
            return comm.ExecuteNonQuery();
        }
        public static object GetScalar(string sql, params SqlParameter[] values)
        {
            SqlCommand comm = new SqlCommand(sql, Conn);
            comm.CommandType = CommandType.StoredProcedure;
            comm.Parameters.AddRange(values);
            return comm.ExecuteScalar();
        }
        public static SqlDataReader GetReader(string sql, params SqlParameter[] values)
        {           
            using (SqlCommand comm = new SqlCommand(sql, Conn))


            {
                comm.CommandType = CommandType.StoredProcedure;
                comm.Parameters.AddRange(values);
                return comm.ExecuteReader();
            }
        }
        public static DataTable GetDataSet(string sql, params SqlParameter[] values)
        {
            DataTable dt = new DataTable();
            DataSet ds = new DataSet();
            using (SqlCommand comm = new SqlCommand(sql, Conn))
            {
                try
                {                    
                    comm.CommandType = CommandType.StoredProcedure;
                    comm.Parameters.AddRange(values);
                    SqlDataAdapter dap = new SqlDataAdapter(comm);
                    dap.Fill(ds);
                    dap.Dispose();
                    if (ds != null)
                    {
                        dt = ds.Tables[0];
                    }
                }
                catch
                {
                    conn.Close();
                }
                finally
                {
                    conn.Close();
                }


                return dt;
            }
        }
    }

[解决办法]
懒得看,告诉你哪行报错,就去找哪行,说的就是已经有一个  DataReader,开着,你又要再次打开
[解决办法]
debug 一步一步调试被,
[解决办法]
        using (SqlDr = cmd.ExecuteReader(CommandBehavior.CloseConnection))    
{         
       if (SqlDr.Read())
        {
            Result = SqlDr[0].ToString();
            if (SqlDr != null)
                SqlDr.Close();
            return Result;
        }
        else
        {
            if (SqlDr != null)
                SqlDr.Close();
            return Result;
        }
}
[解决办法]
SqlDataReader 用完了及时关闭
[解决办法]
SqlDataReader reader =DBHelper.GetReader(...)
if(reader.read())
{}
else
{
   reader.close()
}

热点排行