Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей - PullRequest
4 голосов
/ 08 августа 2009

У меня установлена ​​простая база данных mdb в Visual Basic Express Edition (winforms), и я пытаюсь обновить данные из таблицы данных в базу данных. Я вставил текстовые поля в столбцы, которые я хочу в представлении данных, и это прекрасно работает.

После некоторых трудностей мне наконец-то удалось обновить значения в каждой строке базы данных. Но при попытке изменить вновь созданную запись выдается следующее сообщение об ошибке: «Нарушение параллелизма: команда UpdateCommand затронула 0 из ожидаемых 1 записей»

Я имею в виду, что, похоже, ошибка возникает только для вновь созданных строк. Поскольку я закрываю приложение и открываю его немедленно, я могу обновить значения ячеек. Я также заметил, что идентификатор строки установлен в «-1», когда я только что создал новую строку. Другие строки не имеют отрицательного числа для идентификатора. Может ли это быть причиной? Кажется, что строка на самом деле не обновляется в базе данных.

Итак, это код для кнопки AddRow

Dim newRow As MusicDBDataSet.SongsRow
        newRow = MusicDBDataSet.Songs.NewSongsRow()
        newRow.Name = txtBoxNewName.Text
        newRow.Genre = txtBoxNewGenre.Text
        newRow.Rhytm = txtBoxNewRhytm.Text
        newRow.Length = txtBoxNewLength.Text
        MusicDBDataSet.Songs.Rows.Add(newRow)

        Try
            Me.Validate()
            Me.SongsTableAdapter.Update(Me.MusicDBDataSet.Songs)
            Me.SongsBindingSource.EndEdit()
            Me.MusicDBDataSet.Songs.AcceptChanges()

        Catch ex As Exception
            MsgBox(ex.Message)
        End Try

Это заполняет данные, которые я поместил в текстовые поля, в новую строку DataGridView. Все выглядит хорошо (за исключением значения -1 столбца ID)

Текстовые поля, которые привязаны к базе данных, это те, которые я использую, чтобы попытаться обновить значения ячеек. И код выглядит так:

Try
    Me.Validate()
    Me.SongsBindingSource.EndEdit()
    Me.SongsTableAdapter.Update(Me.MusicDBDataSet.Songs)
    Me.MusicDBDataSet.Songs.AcceptChanges()

Catch ex As Exception
    MsgBox(ex.Message)
End Try

Теперь, я совсем не уверен, что это правильный способ сделать это. Но если подумать, то текстовые поля, используемые для обновления значений вновь созданной строки, связаны с базой данных или самим табличным адаптером, верно? Может быть, сбой UpdateCommand, потому что строка еще не была правильно создана?

Ответы [ 2 ]

3 голосов
/ 14 сентября 2011

Я решил это следующим образом:

После изменения таблицы данных выполните следующий шаг.

dataTable = dataTable.GetChanges()
0 голосов
/ 17 июля 2012

Самый простой способ - открыть набор данных в конструкторе. Удалите команды обновления, вставки и удаления, выберите адаптер таблицы - настройте - дополнительные параметры - создайте операторы вставки, обновления и удаления. Оставьте второй параметр не отмеченным.

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