我收到此错误已经有一个与此命令关联的打开的DataReader必须先关闭。 [英] I am getting this error There is already an open DataReader associated with this Command which must be closed first.

查看:69
本文介绍了我收到此错误已经有一个与此命令关联的打开的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 your SqlDataAdapter object is using internally a DataReader object for reading the data, but you have just created a reader (by using ExecuteReader) before to read the data by using adapter.

2.The solution is to ExecuteRedear after the usage of the SqlDataAdapter, 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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆