У меня есть 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.