У меня установлена простая база данных 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, потому что строка еще не была правильно создана?