#vb.net #visual-studio-2019
#vb.net #visual-studio-2019
Вопрос:
У меня есть кнопка обновления и код
Private Sub txtSave_Click(sender As Object, e As EventArgs) Handles txtSave.Click
Me.Validate()
Me.TrackingBindingSource.EndEdit()
Me.TableAdapterManager.UpdateAll(Me.InventoryDataSet)
MsgBox("Record Update")
End Sub
При запуске я получил сообщение об ошибке
System.InvalidOperationException: 'Update requires a valid UpdateCommand when passed DataRow collection with modified rows.'
Не уверен, что я что-то пропустил в записях обновления. Спасибо
Ответ №1:
Когда вы создаете типизированную таблицу DataSet
из базы данных, мастер генерирует DataTable
и табличный адаптер для каждой таблицы базы данных. DataTable
Схема основана на схеме таблицы, как и SQL в командах адаптера таблицы.
SelectCommand
Содержит SELECT
инструкцию, которая извлекает все столбцы всех строк и выполняется при вашем вызове Fill
. Инструкции InsertCommand
, UpdateCommand
и DeleteCommand
содержат INSERT
, UPDATE
и DELETE
Update
, соответственно, и выполняются по мере необходимости при вашем вызове, когда вы вызываете.,,
SelectCommand
и InsertCommand
Всегда могут быть сгенерированы, потому что все, что им нужно знать, это имя и тип данных каждого столбца. инструкции UPDATE
and DELETE
должны иметь возможность идентифицировать конкретную запись для обновления или удаления, и они делают это, указывая значение первичного ключа в WHERE
предложении. Если ваша таблица базы данных не имеет первичного ключа, то этот SQL не может быть сгенерирован, и ваш табличный адаптер не будет иметь UpdateCommand
or DeleteCommand
.
Что вам нужно сделать, так это убедиться, что все таблицы вашей базы данных имеют первичный ключ. Может быть допустимо иметь таблицу без PK, но это очень редко. Как только в вашей таблице появится PK, вы можете повторно запустить мастер источника данных для обновления введенного DataSet
. Для этого на панели инструментов в окне Источники данных есть кнопка.
Комментарии:
1. Спасибо. Необходимо хорошо знать о первичном ключе.