这里已经是一个与此命令关联的开放DataReader,必须先关闭它。 [英] here is already an open DataReader associated with this Command which must be closed first.

查看:90
本文介绍了这里已经是一个与此命令关联的开放DataReader,必须先关闭它。的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在asmx中制作一个web方法....但每当我运行此方法时我都会收到此错误...我想在datareader的帮助下手动添加数据集中的行



 [WebMethod] 
public DataSet newleger(string accno,string fromdate,string todate)
{
SqlConnection con = new SqlConnection(@ Data Source = 123-PC; Initial Catalog = bcounts; Persist Security Info = True; User ID = Saba; Password = 123);
con.Open();
SqlCommand cmd = new SqlCommand(选择gt.Value_Date,gt.Voucher_no +' - '+ gr.VchrType作为凭证,gt.Acct_Nirration,gr.InstrumentNo,gt.Dr_Amount,gt.Cr_Amount来自gl_transaction gt,Gl_Ref gr其中gt.Accountno ='+ accno +'和gt.Voucher_No = gr.Voucher_no和gt.Value_Date介于'+ fromdate +'和'+ todate +'之间,con);
SqlDataAdapter adp = new SqlDataAdapter(cmd);
SqlDataReader rdr = cmd.ExecuteReader();
十进制crsum = 0;
decimal drsum = 0;
十进制余额= 0;
DataSet ds = new DataSet(Ledger);;
adp.Fill(ds);
if(rdr.HasRows)
{
while(rdr.Read())
{
if(rdr.GetDecimal(4)> 0)
{
balance = balance + rdr.GetDecimal(4);
drsum + = rdr.GetDecimal(4);
DataRow dr = ds.Tables [0] .NewRow();
dr [0] = rdr.GetDateTime(0).ToShortDateString();
dr [1] = rdr.GetString(1);
dr [2] = rdr.GetString(2);
dr [3] = rdr.GetString(3);
dr [4] = rdr.GetDecimal(4).ToString();
dr [5] = - ;
ds.Tables [0] .Rows.Add(dr);

//data.Add(new datalist7(rdr.GetDateTime(0).ToShortDateString(),rdr.GetString(1),rdr.GetString(2),rdr.GetString(3),rdr .GetDecimal(4).ToString(), - ,balance.ToString()));
}
其他
{
余额=余额 - rdr.GetDecimal(5);
crsum + = rdr.GetDecimal(5);
DataRow dr = ds.Tables [0] .NewRow();
dr [0] = rdr.GetDateTime(0).ToShortDateString();
dr [1] = rdr.GetString(1);
dr [2] = rdr.GetString(2);
dr [3] = rdr.GetString(3);
dr [4] = - ;
dr [5] = rdr.GetDecimal(5).ToString();
ds.Tables [0] .Rows.Add(dr);

// data.Add(new datalist7(rdr.GetDateTime(0).ToShortDateString(),rdr.GetString(1),rdr.GetString(2),rdr.GetString(3), - ,rdr.GetDecimal(5).ToString(),balance.ToString()));
}
}

DataRow dd = ds.Tables [0] .NewRow();
dd [0] = - ;
dd [1] = - ;
dd [2] = - ;
dd [3] = - ;
dd [4] = drsum.ToString();
dd [5] = crsum.ToString();
//data.Add(new datalist7( - , - , - , - ,drsum.ToString(),crsum.ToString(), - ));
}

con.Close();
返回ds;





}

解决方案

参见这: http://msdn.microsoft.com/en-us/library /haa3afyz(v=vs.110).aspx [ ^ ],特别是参考关闭DataReader 部分。



问候..

i am making a webmethod in asmx.... but whenever i run this method i will get this error... i want to add manually row in dataset,with the help of datareader

[WebMethod]
    public DataSet newleger(string accno, string fromdate, string todate)
{
    SqlConnection con = new SqlConnection(@"Data Source=123-PC;Initial Catalog=bcounts;Persist Security Info=True;User ID=Saba;Password=123");
    con.Open();
    SqlCommand cmd = new SqlCommand("select gt.Value_Date,gt.Voucher_no+'-'+gr.VchrType as voucher,gt.Acct_Nirration,gr.InstrumentNo,gt.Dr_Amount,gt.Cr_Amount  from gl_transaction gt, Gl_Ref gr where gt.Accountno = '" + accno + "'  and gt.Voucher_No=gr.Voucher_no  and gt.Value_Date between '" + fromdate + "' and '" + todate + "'", con);
    SqlDataAdapter adp = new SqlDataAdapter(cmd);
        SqlDataReader rdr = cmd.ExecuteReader();
    decimal crsum = 0;
    decimal drsum = 0;
    decimal balance = 0;
    DataSet ds = new DataSet("Ledger");;
       adp.Fill(ds);
    if (rdr.HasRows)
    {
        while (rdr.Read())
        {
            if (rdr.GetDecimal(4) > 0)
            {
                balance = balance + rdr.GetDecimal(4);
                drsum += rdr.GetDecimal(4);
                DataRow dr = ds.Tables[0].NewRow();
                dr[0] = rdr.GetDateTime(0).ToShortDateString();
                dr[1] = rdr.GetString(1);
                dr[2] = rdr.GetString(2);
                dr[3] = rdr.GetString(3);
                dr[4] = rdr.GetDecimal(4).ToString();
                dr[5] = "-";
                ds.Tables[0].Rows.Add(dr);

                //data.Add(new datalist7(rdr.GetDateTime(0).ToShortDateString(), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), rdr.GetDecimal(4).ToString(), "-", balance.ToString()));
            }
            else
            {
                balance = balance - rdr.GetDecimal(5);
                crsum += rdr.GetDecimal(5);
                DataRow dr = ds.Tables[0].NewRow();
                dr[0] = rdr.GetDateTime(0).ToShortDateString();
                dr[1] = rdr.GetString(1);
                dr[2] = rdr.GetString(2);
                dr[3] = rdr.GetString(3);
                dr[4] = "-";
                dr[5] = rdr.GetDecimal(5).ToString();
                ds.Tables[0].Rows.Add(dr);
                
               // data.Add(new datalist7(rdr.GetDateTime(0).ToShortDateString(), rdr.GetString(1), rdr.GetString(2), rdr.GetString(3), "-", rdr.GetDecimal(5).ToString(), balance.ToString()));
            }
        }

        DataRow dd = ds.Tables[0].NewRow();
        dd[0] = "-";
        dd[1] = "-";
        dd[2] = "-";
        dd[3] = "-";
        dd[4] = drsum.ToString();
        dd[5] = crsum.ToString();
        //data.Add(new datalist7("-", "-", "-", "-", drsum.ToString(), crsum.ToString(), "-"));
    }

    con.Close();
    return ds;





}

解决方案

See this : http://msdn.microsoft.com/en-us/library/haa3afyz(v=vs.110).aspx[^] and especially refer to the section Closing the DataReader.

Regards..


这篇关于这里已经是一个与此命令关联的开放DataReader,必须先关闭它。的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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