Использование DataReader в VB.NET

Я получил сообщение об ошибке 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

Пожалуйста, помогите.


person Tepken Vannkorn    schedule 06.07.2011    source источник


Ответы (2)


Не используйте повторно переменную myCommand. Создать новый.

myCommand тоже должен располагаться в конце (как и читатель).

Настоящая причина исключения, скорее всего, заключается в том, что вы пытаетесь одновременно запустить две команды в одном соединении. Сначала прочитайте все данные, которые вам нужны, из считывателя, а ЗАТЕМ сделайте все вставки. Не оба сразу (я предполагаю, что вы не хотите создавать два соединения. Это было бы отстойно)

person Ales Ruzicka    schedule 06.07.2011

похоже, вы пытаетесь использовать одну переменную myCommand более одного раза - в первой строке кода и в цикле WHILE. лучше объявить еще одну переменную AdoCommand, чтобы использовать ее в LOOP

person heximal    schedule 06.07.2011