这里已经是一个与此命令关联的开放DataReader,必须先关闭它。 [英] here is already an open DataReader associated with this Command which must be closed first.
本文介绍了这里已经是一个与此命令关联的开放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屋!
查看全文