已经有一个打开的 DataReader 与此命令关联,必须首先关闭错误
There is already an open DataReader associated with this Command which must be closed first error
我在 asp.net 中有两个网格视图,使用 Ajax 的选项卡容器分隔。在一个按钮单击事件中,我希望使用来自两个不同存储过程的数据源填充两个网格视图。
第一个 gridview - 每个租户的销售额的详细汇总
第二个网格视图 - 每个日期的合并销售组
代码如下
SqlCommand cmd = new SqlCommand("spDSRDetailed", con);
cmd.CommandTimeout = 120;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@dateFrom", txtdatefrom.Text);
cmd.Parameters.AddWithValue("@dateTo", txtdateto.Text);
cmd.Parameters.AddWithValue("@Location", hdnLoc.Value);
cmd.Parameters.AddWithValue("@RP", hdnRP.Value);
try
{
con.Open();
grdDailySalesReport.EmptyDataText = "No Records Found";
grdDailySalesReport.DataSource = cmd.ExecuteReader();
grdDailySalesReport.DataBind();
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
此代码仅适用于一个 gridview,我知道可以使用 SQL 数据源来执行此操作,但我不选择该方法,因为我使用了复杂的 SQL 查询而不是理想的做法是使用 SQLDATASOURCE.SELECTCOMMAND.
我试过了,它给了我这个错误
已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。
SqlCommand cmd = new SqlCommand("spDSRDetailed", con);
cmd.CommandTimeout = 120;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlCommand cmd2 = new SqlCommand("spDSRConso", con);
cmd2.CommandTimeout = 120;
cmd2.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@dateFrom", txtdatefrom.Text);
cmd.Parameters.AddWithValue("@dateTo", txtdateto.Text);
cmd.Parameters.AddWithValue("@Location", hdnLoc.Value);
cmd.Parameters.AddWithValue("@RP", hdnRP.Value);
cmd2.Parameters.AddWithValue("@dateFrom", txtdatefrom.Text);
cmd2.Parameters.AddWithValue("@dateTo", txtdateto.Text);
cmd2.Parameters.AddWithValue("@Location", hdnLoc.Value);
cmd2.Parameters.AddWithValue("@RP", hdnRP.Value);
try
{
con.Open();
grdDailySalesReport.EmptyDataText = "No Records Found";
grdDailySalesReport.DataSource = cmd.ExecuteReader();
grdDailySalesReport.DataBind();
grdDSRConso.EmptyDataText = "No Records Found";
grdDSRConso.DataSource = cmd2.ExecuteReader();
grdDSRConso.DataBind();
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
您正在使用 SqlCommand.ExecuteReader
并且消息说:
There is already an open DataReader associated with this Command which
must be closed first
所以你需要先关闭第一个SqlCommand.ExecuteReader
。
试试这个:
SqlDataReader reader = cmd.ExecuteReader();
grdDailySalesReport.EmptyDataText = "No Records Found";
grdDailySalesReport.DataSource = reader;
grdDailySalesReport.DataBind();
reader.Close();
reader = cmd2.ExecuteReader();
grdDSRConso.EmptyDataText = "No Records Found";
grdDSRConso.DataSource = reader;
grdDSRConso.DataBind();
reader.Close();
我在 asp.net 中有两个网格视图,使用 Ajax 的选项卡容器分隔。在一个按钮单击事件中,我希望使用来自两个不同存储过程的数据源填充两个网格视图。
第一个 gridview - 每个租户的销售额的详细汇总
第二个网格视图 - 每个日期的合并销售组
代码如下
SqlCommand cmd = new SqlCommand("spDSRDetailed", con);
cmd.CommandTimeout = 120;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@dateFrom", txtdatefrom.Text);
cmd.Parameters.AddWithValue("@dateTo", txtdateto.Text);
cmd.Parameters.AddWithValue("@Location", hdnLoc.Value);
cmd.Parameters.AddWithValue("@RP", hdnRP.Value);
try
{
con.Open();
grdDailySalesReport.EmptyDataText = "No Records Found";
grdDailySalesReport.DataSource = cmd.ExecuteReader();
grdDailySalesReport.DataBind();
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
此代码仅适用于一个 gridview,我知道可以使用 SQL 数据源来执行此操作,但我不选择该方法,因为我使用了复杂的 SQL 查询而不是理想的做法是使用 SQLDATASOURCE.SELECTCOMMAND.
我试过了,它给了我这个错误
已经有一个与此命令关联的打开的 DataReader,必须先将其关闭。
SqlCommand cmd = new SqlCommand("spDSRDetailed", con);
cmd.CommandTimeout = 120;
cmd.CommandType = System.Data.CommandType.StoredProcedure;
SqlCommand cmd2 = new SqlCommand("spDSRConso", con);
cmd2.CommandTimeout = 120;
cmd2.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@dateFrom", txtdatefrom.Text);
cmd.Parameters.AddWithValue("@dateTo", txtdateto.Text);
cmd.Parameters.AddWithValue("@Location", hdnLoc.Value);
cmd.Parameters.AddWithValue("@RP", hdnRP.Value);
cmd2.Parameters.AddWithValue("@dateFrom", txtdatefrom.Text);
cmd2.Parameters.AddWithValue("@dateTo", txtdateto.Text);
cmd2.Parameters.AddWithValue("@Location", hdnLoc.Value);
cmd2.Parameters.AddWithValue("@RP", hdnRP.Value);
try
{
con.Open();
grdDailySalesReport.EmptyDataText = "No Records Found";
grdDailySalesReport.DataSource = cmd.ExecuteReader();
grdDailySalesReport.DataBind();
grdDSRConso.EmptyDataText = "No Records Found";
grdDSRConso.DataSource = cmd2.ExecuteReader();
grdDSRConso.DataBind();
}
catch (Exception ex)
{
throw ex;
}
finally
{
con.Close();
con.Dispose();
}
您正在使用 SqlCommand.ExecuteReader
并且消息说:
There is already an open DataReader associated with this Command which must be closed first
所以你需要先关闭第一个SqlCommand.ExecuteReader
。
试试这个:
SqlDataReader reader = cmd.ExecuteReader();
grdDailySalesReport.EmptyDataText = "No Records Found";
grdDailySalesReport.DataSource = reader;
grdDailySalesReport.DataBind();
reader.Close();
reader = cmd2.ExecuteReader();
grdDSRConso.EmptyDataText = "No Records Found";
grdDSRConso.DataSource = reader;
grdDSRConso.DataBind();
reader.Close();