已有打开的与此连接相关联的 DataReader,必须首先将它关闭,请问各位如何解决啊?

windykey 2004-10-09 01:27:44
寻求帮助:请问这是怎么回事?
打开一个数据库中主表(table1)——从表(table2)的程序如下:

OleDbCommand cmd;
OleDbDataReader dr;
OleDbCommand cmd2;
OleDbDataReader dr2;

cmd=new OleDbCommand("select * from table1",cn);
dr=cmd.ExecuteReader();
while(dr.Read())
{

cmd2=new OleDbCommand("select * from table2 where blockid=" +
dr.GetInt32(0) +";",cn);

//程序总是在这里出错,错误信息如下:
//已有打开的与此连接相关联的DataReader,必须首先将它关闭
dr2=cmd2.ExecuteReader();

while(dr2.Read())
{
//代码略...

}
dr2.Close();
dr2=null;
cmd2.Dispose();
cmd2=null;

}

dr.Close();
dr=null;
cmd.Dispose();
cmd=null;
cn.Dispose();
cn=null


感觉好象DataReader在同一时间只能打开一个???
谁能说说这是怎么回事?谢谢先!

...全文
156 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
hky5_com 2005-01-23
  • 打赏
  • 举报
回复
解决了,第一个连接只能一个DataReader
"如果想在相同的数据存储区上同时打开两个DataReaders,就必须显式创建两个连接,每个DataReader一个 "
hky5_com 2005-01-23
  • 打赏
  • 举报
回复
OleDbCommand mycmd=new OleDbCommand (strInsert,myConn);
OleDbDataReader sdr=mycmd.ExecuteReader();
//第一层循环,按照工号进行逐一计算
while(sdr.Read())
{

gonghaostr=sdr["gonghao"].ToString();



string strInsert2 = "select * from mingxi where ....";
OleDbCommand mycmd2=new OleDbCommand (strInsert2,myConn);
OleDbDataReader sdr2=mycmd2.ExecuteReader();//在这句里报错

//代码...

sdr2.Close();
sdr2=null;
mycmd2.Dispose();
mycmd2=null;



//统计

}
//统计
//查询语句
sdr.Close();
sdr=null;
mycmd.Dispose();
mycmd=null;


我的也是这种情况,不知如何解决?
windykey 2004-10-09
  • 打赏
  • 举报
回复
谢谢各位,但象下面这个问题如何解决?

sqlStr="SELECT * FROM A";
SqlCommand myCommand=new SqlCommand(sqlStr,Conn);
SqlDataReader myReader=myCommand.ExecuteReader();

while(myReader.Read())
{

nValue=myReader["ID"].ToString();

sqlStrSub="select* FROM B where B.id='"+nValue+"'";

SqlCommand myCommand2=new SqlCommand(sqlStrSub,Conn);
SqlDataReader myReader2=myCommand2.ExecuteReader();
  //执行到此上句出现:已有打开的与此连接相关联的 DataReader,必须首先将它关闭。
     while(myReader2.Read())
{
//略
}
}
tnt8csdn2000 2004-10-09
  • 打赏
  • 举报
回复
DataReader是在同一时间只能打开一个。
kkeemmgg 2004-10-09
  • 打赏
  • 举报
回复
去掉前面定义的Cmd2和Dr2.把它的定义放在,循环体内就行了。

while(dr.Read())
{
//在此处
OleDbCommand cmd2=new OleDbCommand("select * from table2 where blockid=" +
dr.GetInt32(0) +";",cn);

OleDbDataReader dr2=cmd2.ExecuteReader();

while(dr2.Read())
{
//代码略...

}
dr2.Close();
dr2=null;
cmd2.Dispose();
cmd2=null;

}

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧