![]() |
Модераторы: gambit |
![]() ![]() ![]() |
|
reloni |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: нет Всего: 4 |
Приветствую всех.
Пишу программу, которая работает с двумя таблицами, связанными отношением. Есть главная таблица Base, вторая таблица Details. Возник вопрос, как правильно их обновлять. Так, например, если мы добавляем запись в таблицу Base, потом пару дочерних записей в таблицу Details, а затем запускаем вот такое обновление:
То все данные в БД сохраняются отлично. С обновлением такой метод тоже работает на ура. Но вот если мы удалим запись из родительской таблицы, то т.к. у дата сета стоит каскадное удаление, он удалит все дочерние записи и если теперь запустить тот же самый код, то вылезет исключение: «Concurrency violation: the DeleteCommand affected 0 of the expected 1 records». Поэтому, в случае удаления родительской записи приходится сначала выдергивать удаленные записи из таблицы Details и обновлять базу:
Затем тоже самое для таблицы Base, тогда удаление записей проходит без ошибок. Ничего умнее придумать не удалось, может есть более нормальный способ это сделать? Второй вопрос – как ко всему этому прикрутить транзакции? Т.к. сгенерированные студией адаптеры не дают возможности добраться до команд, единственное, что смог придумать – использовать класс TransactionScope:
Но подозреваю, что это тоже не лучший вариант. |
||||||
|
|||||||
thomas |
|
|||
![]() Доцент... почти ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1385 Регистрация: 3.10.2006 Где: " Сказочное королевство" Репутация: 35 Всего: 65 |
reloni,
а что это значит?
У меня такое же исключение только с UpdateCommand, когда я пытаюсь обновить не одну, а две строки в таблице. -------------------- Крепко жму горло, искренне ваш Thomas. (С)vingrad Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну! Проблемы негров шерифа не волнуют. |
|||
|
||||
reloni |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 112 Регистрация: 10.5.2006 Где: Москва Репутация: нет Всего: 4 |
Это значит, что под действие команды не попала ни одна строка в БД. Если проще, то команда не нашла строку, для которой выполнить обновление (удаление и т.д.).
|
|||
|
||||
![]() ![]() ![]() |
Прежде чем создать тему, посмотрите сюда: | |
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |