我收到此错误已经有一个与此命令关联的打开的DataReader必须先关闭。 [英] I am getting this error There is already an open DataReader associated with this Command which must be closed first.
本文介绍了我收到此错误已经有一个与此命令关联的打开的DataReader必须先关闭。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
Hai我在编写代码时收到此错误
Hai I am getting this error while i was writing the code
public DataTable FillData(SaleOrderBEL SaleBEL)
{
if (cn.State != ConnectionState.Open)
cn.Open();
cmd = new SqlCommand("SP_SalesOrder_FillData", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@comp_id", SaleBEL.comp_id);
cmd.Parameters.AddWithValue("@so_no", SaleBEL.so_no);
cmd.Parameters.AddWithValue("@sod_deleted", SaleBEL.sod_deleted);
if (dr.IsClosed == false) dr.Close();
dr = cmd.ExecuteReader();
sda = new SqlDataAdapter(cmd);
ds = new DataSet();
sda.Fill(ds, "so_details");
while (dr.Read())
{
object[] obj = { dr["sod_order"].ToString(),"", dr["prod_code"].ToString(), dr["prod_desc"].ToString(), dr["sod_qty"].ToString(),
dr["sod_uom"].ToString(), dr["sod_uprice"].ToString(), dr["sod_gstamt"].ToString(),
dr["sod_disc"].ToString(), dr["sod_netamount"].ToString(),"",dr["sod_qty_reserve"].ToString() };
dt = ds.Tables[0];
dt.Rows.Add(obj);
}
dr.Close();
cn.Close();
return dt;
}
推荐答案
1.问题因你的而产生SqlDataAdapter
对象在内部使用DataReader
对象来读取数据,但是你刚刚创建了一个阅读器(通过使用ExecuteReader
)之前使用适配器读取数据。
2.解决方案是ExecuteRedear
使用SqlDataAdapter
之后,如下例所示:
1.The problem is genrated by the fact that yourSqlDataAdapter
object is using internally aDataReader
object for reading the data, but you have just created a reader (by usingExecuteReader
) before to read the data by using adapter.
2.The solution is toExecuteRedear
after the usage of theSqlDataAdapter
, like in the next example:
public DataTable FillData(SaleOrderBEL SaleBEL)
{
if (cn.State != ConnectionState.Open)
cn.Open();
cmd = new SqlCommand("SP_SalesOrder_FillData", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@comp_id", SaleBEL.comp_id);
cmd.Parameters.AddWithValue("@so_no", SaleBEL.so_no);
cmd.Parameters.AddWithValue("@sod_deleted", SaleBEL.sod_deleted);
if (dr.IsClosed == false) dr.Close();
sda = new SqlDataAdapter(cmd);
ds = new DataSet();
sda.Fill(ds, "so_details");
//
dr = cmd.ExecuteReader(); //Here!!!
while (dr.Read())
{
object[] obj = { dr["sod_order"].ToString(),"", dr["prod_code"].ToString(), dr["prod_desc"].ToString(), dr["sod_qty"].ToString(),
dr["sod_uom"].ToString(), dr["sod_uprice"].ToString(), dr["sod_gstamt"].ToString(),
dr["sod_disc"].ToString(), dr["sod_netamount"].ToString(),"",dr["sod_qty_reserve"].ToString() };
dt = ds.Tables[0];
dt.Rows.Add(obj);
}
dr.Close();
cn.Close();
return dt;
}
这篇关于我收到此错误已经有一个与此命令关联的打开的DataReader必须先关闭。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文