2009-09-09 1 views
0

У меня есть типизированный набор данных, и когда я вызываю TableAdapter.Update(DataRow), SQL-исполнение включает обновление столбца первичного ключа базы данных.Предотвращение ввода типизированного DataSet столбца PK

К сожалению, когда этот код работает на реплицированную базе данных, столбец PK имеет множество rowguid собственности, и я получаю следующее сообщение об ошибке:

System.Data.SqlClient.SqlException: Updating columns with the rowguidcol property is not allowed. The transaction ended in the trigger. The batch has been aborted. at System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent, BatchCommandInfo[] batchCommands, Int32 commandCount) at System.Data.Common.DbDataA...

Как предотвратить TableAdapter от обновления этой колонки (значение такое же)?

+0

В вашем типизированном наборе данных есть столбец первичного ключа, который помечается как первичный ключ – Gratzy

ответ

2

Вы можете вручную отредактировать SQL, созданный для команды update, в дизайнере DataSet Просто нажмите на адаптер и найдите UpdateCommand. Есть ли причина, по которой вы обновляете первичный ключ? Если нет (и вы не должны быть, если это вообще возможно), тогда вы должны удалить это из команды.

+0

Я полностью * не хочу, чтобы он обновлял ПК - это автоматически сгенерированный SQL, а не я. Однако вы хорошо разбираетесь в его редактировании. Только проблема в том, что редактирование будет потеряно, если/когда класс будет регенерирован через конструктор . –

0

Если ваш столбец на самом деле отмечен как первичный ключ в типизированном DataSet, то автоматически созданный обновленный оператор не должен его обновлять. Я бы посмотрел на дизайнера и дважды проверял, что это на самом деле первичный ключ.

+0

Да = Я проверил это, и все выглядит нормально. Я могу попытаться восстановить его с нуля и посмотреть, не имеет значения. –

Смежные вопросы