"已有打开的与此连接相关联的DataReader"问题
打开一个数据库中主表(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在同一时间只能打开一个???
谁能说说这是怎么回事?谢谢先!
问题点数:20、回复次数:4Top
1 楼ALong_Yue()回复于 2004-12-02 11:51:02 得分 5
你的理解是正确的。:)Top
2 楼exboy(kuku)回复于 2004-12-02 11:51:28 得分 5
cmd2=new OleDbCommand("select * from table2 where blockid=" + dr.GetInt32(0) +";",cn);
在这一句里面不能使用 cn, 因为 cn 还在被 dr 使用,所以在这里必须 new 一个新的 Connection 对象.Top
3 楼gsxzm(肖明)回复于 2004-12-02 12:06:27 得分 5
它已经告诉你哪里错了,呵呵,还有就是reader用完以后马上关掉最好。不赞成同时用两个conn,耗资源啊。照你的情况可以先把dr里面的东西放进一个int数组里面,关掉,然后再用第二个dr2.仅供参考:)Top
4 楼wf5360308(冷月孤峰)回复于 2004-12-02 13:05:34 得分 5
是你之前打开的连接没有关闭!Top
相关问题
- 打开的与此连接相关联的 DataReader,只有40分了,都给了
- 关于“已有打开的与此连接相关联的 DataReader,必须首先将它关闭”
- "已有打开的与此连接相关联的 DataReader,必须首先将它关闭。"
- 已有打开的与此连接相关联的 DataReader,必须首先将它关闭,怎么解决?
- 已有打开的与此连接相关联的 DataReader,必须首先将它关闭
- 已有打开的与此连接相关联的 DataReader,必须首先将它关闭。
- 再问一问题,如何解决“已打开的与此连接相关联的 DataReader,必须首先将它关闭。”的问题?
- 【救急】已有打开的与此连接相关联的 DataReader,必须首先将它关闭.急,解决马上结帖,不耽误大家时间
- datareader提示没有打开的连接错误
- Winform中如何打开关联文档




