Вы не можете использовать построитель команд. Вам нужно самостоятельно создавать команды действий. Если вы хотите обновить только одну таблицу, вам понадобится только один адаптер данных, но если вы хотите обновить обе таблицы, тогда, поскольку Access поддерживает только один оператор SQL для каждой команды, вам понадобятся два адаптера данных.
Один адаптер данных может выглядеть так:
Dim updateCommand As New OleDbCommand("UPDATE MyTable SET MyColumn = @MyColumn WHERE Id = @Id", myConnection)
updateCommand.Parameters.Add("@MyColumn", OleDbType.VarChar, 50, "MyColumn")
updateCommand.Parameters.Add("@Id", OleDbType.Integer, 0, "Id")
myDataAdapter.UpdateCommand = updateCommand
myDataAdapter.Update(myDataTable)
Несколько адаптеров данных могут выглядеть следующим образом:
Dim firstUpdateCommand As New OleDbCommand("UPDATE FirstTable SET FirstColumn = @FirstColumn WHERE FirstId = @FirstId", myConnection)
firstUpdateCommand.Parameters.Add("@FirstColumn", OleDbType.VarChar, 50, "FirstColumn")
firstUpdateCommand.Parameters.Add("@FirstId", OleDbType.Integer, 0, "FirstId")
firstDataAdapter.UpdateCommand = firstUpdateCommand
firstDataAdapter.AcceptChangesOnUpdate = False
firstDataAdapter.Update(myDataTable)
Dim secondUpdateCommand As New OleDbCommand("UPDATE SecondTable SET SecondColumn = @SecondColumn WHERE SecondId = @SecondId", myConnection)
firstUpdateCommand.Parameters.Add("@SecondColumn", OleDbType.VarChar, 50, "SecondColumn")
firstUpdateCommand.Parameters.Add("@SecondId", OleDbType.Integer, 0, "SecondId")
secondDataAdapter.UpdateCommand = secondUpdateCommand
secondDataAdapter.Update(myDataTable)
Обратите внимание, что вы должны установить AcceptChangesOnUpdate
на False
на первом адаптер данных, иначе первый вызов Update
неявно вызовет AcceptChanges
на DataTable
, и второй адаптер данных не внесет никаких изменений для сохранения.