2013-03-31 61 views
0

我在SQL Express 2005中使用.net 4.0 Framework(VB)。我需要在使用datareader嵌套时使用do。有些东西一样.......VB.Net中的嵌套数据读取器

SQLQuery1="Select * from Table1" 
cmd = New Data.SqlClient.SqlCommand(SQLQuery1, myConn) 
If cmd.Connection.State = 1 Then cmd.Connection.Close() 
cmd.Connection.Open() 
dr = cmd.ExecuteReader 
Do While dr.Read 
    SQLQuery2="Select * from Table2 where ID=" & dr.item("field1") 
    cmd2 = New Data.SqlClient.SqlCommand(SQLQuery2, myConn) 
    If cmd2.Connection.State = 1 Then cmd2.Connection.Close() 
    cmd2.Connection.Open() 
    dr2 = cmd2.ExecuteReader 
    Do While dr2.Read 
    --------- Execute Insert/Update Statement here ---------------- 
    loop 
    dr2.close 
loop 
dr.close 

它执行首次但当它返回到“做虽然dr.Read”第二次提示错误 无效试图调用时阅读的读者被关闭。 我在连接字符串中使用MARS = true,但没有看到任何区别。

我在哪里做错了?

感谢

+0

这是一种不好的SQL方法,您应该从一个查询中返回2个结果集,然后在单个读取器中处理这些结果集。 SQL在基于集合的操作上要比许多小的查询要好得多。 – DaveShaw

回答

0

1)两个SqlCommands共享同一连接

2)你关闭连接,同时从博士读

3)你循环博士时要循环DR2(见@ Jack的回答)

+0

我的错误是dr2.read – Yusuf