在VB.NET中使用DataReader

时间:2011-07-06 07:30:34

标签: vb.net datareader sqlcommand

我使用以下代码收到了错误消息There is an open data reader associated with this command which needs to be closed first

myCommand = New SqlCommand("SELECT BookCode FROM tblBook",myConnection)
 myReader = myCommand.ExceuteReader
 While myReader.Read
   If myReader(0).ToString <> txtBookCode.Text Then
      myCommand = New SqlCommand("INSERT INTO tblBook VALUES(@BookCode, @BookTitle)",myConnection)
      myCommand.Parameters.AddWithValue("@BookCode", txtBookCode.Text)
      myCommand.Parameters.AddWithValue("@BookTitle", txtBookTitle.Text)
      myCommand.ExecuteNonQuery()
   Else
      MsgBox("There is already a book name '"& txtTitle.Text "'. Please try another code.",vbOkOnly,"BookCode Exists")
   End If
 End While

请求帮助。

2 个答案:

答案 0 :(得分:2)

不要重复使用myCommand变量。创建一个新的。

myCommand也应该放在最后(以及读者)。

异常的真正原因更可能是您尝试同时在一个连接上运行两个命令。 首先从阅读器读取您需要的所有数据,然后执行所有插入操作。不是一次两个(我假设你不想创建两个连接。那会很糟糕)

答案 1 :(得分:1)

看起来你试图不止一次地使用一个变量myCommand - 在第一行代码和WHILE循环中。 最好再声明一个AdoCommand变量以在LOOP中使用它