【发布时间】:2013-03-31 10:18:01
【问题描述】:
我正在使用带有 SQL Express 2005 的 .net 4.0 Framework (VB)。我需要在使用 datareader 嵌套时使用 do。诸如此类......
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
它第一次执行,但是当它第二次返回“Do While dr.Read”时,它给出了错误 阅读器关闭时调用 Read 的尝试无效。 我在连接字符串中使用 MARS=true 但没有发现任何区别。
我哪里做错了?
谢谢
【问题讨论】:
-
这是一种糟糕的 SQL 执行方式,您应该从一个查询返回 2 个结果集,然后在单个读取器中处理这些结果集。 SQL 在基于集合的操作方面比大量的小查询要好得多。
标签: sql-server vb.net datareader