powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / UpdateCommand affected 0 records
16 сообщений из 16, страница 1 из 1
UpdateCommand affected 0 records
    #36740424
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
База - MsSql 2k5.
Типизованный датасет. Таблица имеет PrimaryKey с AutoIdentity (автоинкремент).
Есть основная форма с гридом. В грид добавляю новую строку так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
OperatorBonusEdit f = new OperatorBonusEdit( bonusBindingSource, operatorComboBox.Text );
f.StartPosition = FormStartPosition.CenterScreen;
f.Icon = Program.MdiParent.Icon;
f.ShowInTaskbar = false;
DialogResult result = f.ShowDialog();
if( result == DialogResult.OK ) {
	bonusTableAdapter.Update( ratingDataSet );
}

Открывается форма редактирования, там заполняю поля, жму ок, выполняется код:
Код: plaintext
1.
2.
3.
4.
this.Validate();
this.bonusBindingSource.EndEdit();
this.DialogResult = DialogResult.OK;
Close();

Т.о. я возвращаюсь в первоначальную (основную форму). Вижу добавленную строку в гриде. Пытаюсь сразу же ее редактировать (опять открыв форму редактирования). Не внося никаких изменений, пытаюсь сохранить, валится Exception Concurrency Violation UpdateCommand affected 0 records

Интуитивно понимаю, что все дело в PrimaryKey с его автоикрементом. Но где что нужно дописать, чтобы заработало, не пойму.
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740435
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот еще что подумал - в моей ситуации только что добавленная строка попадает в базу на SQL сервер со своим ID (допустим, 15).

А в датасете она с другим ID (допустим, -1). Так вот как дать этому датасету понять, чтобы он прочитал "правильное" значение для ID из базы для только что добавленной строки?
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740473
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
frominfotek,
Если Вы пишете "учебно-тренировочный" пример - смотрите, как делал автор.
Если пытаетесь создать рабочее приложение - потрудитесь прописать явно процедуры извлечения, модификации и удаления записей БД.
В случае с МС СКЛ 2005 рекомендую создать функцию записи новой строки, которая будет при успехе ввода в БД возвращать новый ID (напр. при помощи ScopeID). Тогда при утверждении модального диалога Вы будете добавлять в списочный грид (а точнее в соотв. таблицу датасэта) запись с уже валидным ID.
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740546
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется, где-то в недрах ADO есть какое-то свойство, только не помню, у какого объекта, специально для автоинкремента, чтобы датасет "читал" обратно ID из базы.
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740580
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
frominfotekКажется, где-то в недрах ADO есть какое-то свойство, только не помню, у какого объекта, специально для автоинкремента, чтобы датасет "читал" обратно ID из базы.
Хотелось бы знать, как бы это могло быть реализовано?
Если у приличных СУБД разные механизмы генерации идентификаторов (генераторы, последовательности и т.п.), имя которых надо указывать явно для внешнего использования.
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740621
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
frominfotek,
Первоисточник: http://msdn.microsoft.com/ru-ru/library/ks9f57t0.aspx
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740730
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот рыл-рыл, вроде оно:
AcceptChangesDuringUpdate

Но как его использовать, пока не пойму (зуб болит, мозг разрушает).
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740737
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, только что вспомнил очень важную оговорку - то свойство (предположительно AcceptChangesDuringUpdate), о котором я говорил, работает ТОЛЬКО с микрософтным сиквелом.
Ну т.е. платформа C# - от MS, и сиквел сервер - от них же. Вот они и хитро под себя реализовали.

Под другие сервера, скорее всего, работать не будет, как и говорил Курдль.
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740762
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я даже вспомнил, где читал про это - у Девида Сеппы "Программирование на ADO.NET 2.0", где-то в конце книги. Книга, к сожалению не под рукой, и читал года два назад, сейчас пробую скачать книгу где-нибудь.
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740799
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
frominfotek,

Это есть в MSDN-е даже на Русском: http://msdn.microsoft.com/ru-ru/library/system.data.common.dataadapter.acceptchangesduringupdate.aspx
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740963
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прочитал и только что скачанную книгу Сеппы, и MSDN.
Очень много рассуждений, но одно я так и не понял - что мне нужно добавить в код, чтобы у строки, к-рую я только что добавил, при отсылании Update на сервер, обновлялось ID в соответствии с полученным от сервера значением?
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36740990
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
frominfotek что мне нужно добавить в код, чтобы у строки, к-рую я только что добавил, при отсылании Update на сервер, обновлялось ID в соответствии с полученным от сервера значением?
Я мельком пробежал по описанию и понял, что нужно правильно прописать SQL в selectcommand и insertcommand -свойствах DataAdapter.
Вы используете DataAdapter, который автоматически сформировался в Датасэт-дизайнере?
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36741060
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, именно так.


Кстати, я уже даже морально готов после Update() , полностью заново читать таблицу с SQL-сервера, так:

Код: plaintext
this.ratingOperatorTableAdapter.FillForRatingMember( this.ratingDataSet.RatingOperator );

Но и это не помогает, может, очищать как-то надо что-то перед повторным вызовом Fill() ?
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36741236
Курдль
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
frominfotekДа, именно так.


Кстати, я уже даже морально готов после Update() , полностью заново читать таблицу с SQL-сервера
Но и это не помогает, может, очищать как-то надо что-то перед повторным вызовом Fill() ?

Читать таблицу после Update - это не такой уж и плохой вариант. Тут надо опираться на ТЗ (насколько нагружена система, быстрый ли канал связи и т.п.). А в идеале - чем чаще запрашиваете данные с сервера тем меньше вероятность утраты их актуальности.

Что у Вас не получается при повторном Fill?
Да, можно перед ним чистить целевую таблицу. А более корректно использовать merge() - Сеппа подробно описывает, как использовать этот метод. Советую изучить - это очень важная особенность ADO.NET.
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36741376
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!

Я тут ошибся, написав, что " полностью заново читать таблицу с SQL-сервера не помогает".
Все отлично помогает, я просто не ту таблицу заново читать пытался :)

В данном случае решил проблему путем чтения заново таблицу после каждого Update(). Записей будет немного, так что нормально.
...
Рейтинг: 0 / 0
UpdateCommand affected 0 records
    #36741547
frominfotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
НАШЕЛ !!! ololo
я знал, что это есть!!!!!!!!!!!!!!!!!

в типизованном датасете жмем правой кнопкой на TableAdapter -> Configure.
Там выбираем Advanced Options...
и ставим галочку "Refresh the data table" -> и все, дальше работает само !!!

Вот не понимают M$: в своих MSDN, на форумах и т.д. и т.п. тонны мегабайт замороченных объяснений, как оно все устроено, как исправить, но ни слова о том, что нужно поставить одну лишь галочку, но в очень секретном месте :(
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / UpdateCommand affected 0 records
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]