Использование DataReader в VB.NET - PullRequest
0 голосов
/ 06 июля 2011

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

2 голосов
/ 06 июля 2011

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

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

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

1 голос
/ 06 июля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...