1

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

初めて実行しますが、2回目に「Do While dr.Read」に戻ると 、リーダーが閉じているときに読み取りを呼び出す無効な試行というエラーが発生します。 接続文字列で MARS=true を使用していますが、違いは見られません。

私はどこで間違っていますか?

ありがとう

4

2 に答える 2

-1

1) 2 つの SqlCommands が同じ接続を共有する

2)drからの読み取り中に接続を閉じます

3)dr2をループしたいときにdrをループします(@Jackの回答を参照)

于 2013-03-31T10:30:14.520 に答える