Актуализиране от DataGridView с SqlDataAdapter

Имам 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)

Това работи добре, когато записвам в обикновени таблици. Въпреки това искам да запазя в изглед, който има тригер ВМЕСТО, който се задейства при вмъкване, актуализиране и изтриване. Когато се опитам да използвам горното с този изглед, получавам грешката:

Динамично генериране на SQL за UpdateCommand не се поддържа срещу SelectCommand, която не връща информация за ключова колона.

Как мога да запазя в този изглед? Не искам да записвам директно в основната таблица, защото искам тригерът да се задейства.

Благодаря!

РЕДАКТИРАНЕ: Опитах също ръчно генериране на InsertCommand и UpdateCommand, но получих същата грешка.

РЕДАКТИРАНЕ 2: Оказа се, че съм сгрешил командите, когато ги генерирах ръчно. След като поправих, че работи добре - изгледът ми се актуализира и тригерът се задейства според очакванията. Предполагам, че просто не можете да генерирате автоматично командите за изглед с SqlCommandBuilder.


person OMill    schedule 11.04.2011    source източник
comment
вашата таблица има ли колона с първичен ключ?   -  person serhat_bundy    schedule 11.04.2011
comment
Основната таблица има първичен ключ. Чудех се дали SqlDataAdapter не го прихваща, защото сочех към изгледа, а не към таблицата. Сега също си мисля, че може да съм сбъркал командите, когато се опитах да ги напиша ръчно, така че ще опитам отново...   -  person OMill    schedule 11.04.2011


Отговори (1)


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

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

person serhat_bundy    schedule 11.04.2011