Обновление из DataGridView с SqlDataAdapter - PullRequest
0 голосов
/ 11 апреля 2011

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

1 Ответ

0 голосов
/ 11 апреля 2011

быстрый поиск в Google показывает, что эта проблема может возникнуть, если в вашей таблице нет значения первичного ключа. Ваш запрос на выборку должен вернуть это значение для запроса на обновление (если столбец первичного ключа отсутствует, это не так).

http://social.msdn.microsoft.com/Forums/en-NZ/Vsexpressvcs/thread/5dec5633-ac84-48d9-8fd6-5c7601be4ccd

...