У меня есть DataGridView, который отображает данные из базы данных SQL Server. Это позволяет пользователю редактировать данные и сохранять их обратно в базу данных.
Способ сохранения данных обратно в базу данных примерно такой:
Dim da As New SqlDataAdapter
Dim cmdBuilder As New SqlCommandBuilder(da)
da.SelectCommand = New SqlCommand(sql, conn)
da.InsertCommand = cmdBuilder.GetInsertCommand
da.UpdateCommand = cmdBuilder.GetUpdateCommand
Dim cb As SqlCommandBuilder = New SqlCommandBuilder(da)
da.Update(dt)
Это отлично работает, когда я сохраняю в обычные таблицы. Однако я также хочу сохранить представление с триггером INSTEAD OF, который срабатывает при вставке, обновлении и удалении. Когда я пытаюсь использовать вышеуказанное с этим представлением, я получаю сообщение об ошибке:
Генерация динамического SQL для UpdateCommand не поддерживается для SelectCommand, который не возвращает информацию о ключевом столбце.
Как я могу сохранить в этом представлении? Я не хочу сохранять напрямую в базовую таблицу, потому что хочу, чтобы триггер срабатывал.
Спасибо!
РЕДАКТИРОВАТЬ: я также пытался вручную сгенерировать InsertCommand и UpdateCommand, но получил ту же ошибку.
РЕДАКТИРОВАТЬ 2: Оказалось, что я неправильно понял команды, когда сгенерировал их вручную. Как только я исправил, что он работал нормально, мое представление обновляется, и триггер срабатывает, как и ожидалось. Я предполагаю, что вы просто не можете автоматически генерировать команды для представления с помощью SqlCommandBuilder.