c# - Error when I use SqlDataReader in an another SqlDataReader -
i error
there open datareader associated command must closed first.
when use sqldatareader in sqldatareader. don't know made mistake , how can solved? error appears when second datareader (dr2) executed.
{ cmd = new sqlcommand("select agent,comm,primm comm a_id = '" + textbox1.text + "' , date >= @date1 , date <= @date2 ", agr); cmd.parameters.addwithvalue("@date1", datetimepicker1.value); cmd.parameters.addwithvalue("@date2", datetimepicker2.value); dr = cmd.executereader(); while (dr.read()) { aid = dr[0].tostring().trim(); comm = double.parse(dr[1].tostring()); busi = double.parse(dr[2].tostring()); cmd2 = new sqlcommand("select s_id,lvl agnt a_id = @a_id", agr); cmd2.parameters.addwithvalue("@a_id", aid); // on line executed message // there open datareader associated // command must closed first. dr2 = cmd2.executereader(); if(dr2.read()) { abc = dr2[0].tostring(); } dr2.close(); } dr.close(); cmd.parameters.clear(); }
when open datareader, connection used exclusively datareader , cannot used execute other commands (sqlcommand.executenonquery, sqldataadapter etc..).
see remarks section on msdn reference on sqldatareader.
need add multipleactiveresultsets=true connection string overcome limitation
this article on msdn explain details of problem
as unrelated note, please, avoid use string concatenation build command text. using parameters, why switch string concat 1 value?
cmd = new sqlcommand("select agent,comm,primm comm " + "where a_id = @id , date >= @date1 , date <= @date2 ", agr); cmd.parameters.addwithvalue("@id", textbox1.text); cmd.parameters.addwithvalue("@date1", datetimepicker1.value); cmd.parameters.addwithvalue("@date2", datetimepicker2.value); dr = cmd.executereader();
Comments
Post a Comment