powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Зачем такой сложный запрос UPDATE?
8 сообщений из 8, страница 1 из 1
Зачем такой сложный запрос UPDATE?
    #34100305
eLVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет.
Просто любопытно...

По умолчанию Dataset Designer в 2005-ой студии строит в TableAdapter-ах, какие-то жуткие UPDATE запросы. Например, если есть таблица с идентификатором ID и полями Field1 , Field2 , ... FieldN , то UPDATE запрос будет выглядеть как

UPDATE myTable SET
...
WHERE (ID = @Original_ID) AND (Field1 = @Original_Field1) AND (Field2 = @Original_Field2) AND ... AND (FieldN = @Original_FieldN)

Спрашивается, зачем такое условие WHERE, ведь можно оставить

UPDATE myTable SET
...
WHERE (ID = @Original_ID)

???

Явное повышение скорости выполнения запроса + меньшая вероятность возникновения исключений типа DBConcurrencyException

Или есть что-то, о чем я не догадываюсь?
...
Рейтинг: 0 / 0
Зачем такой сложный запрос UPDATE?
    #34100495
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильные рассуждения.
eLVik
Или есть что-то, о чем я не догадываюсь?

ИМХО, это сделано специально, выбран унифицированный подход, с наиболее полной идентификацией изменяемой строки.
Where надо менять обязательно так как нужно Вам .

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Зачем такой сложный запрос UPDATE?
    #34100529
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eLVik
+ меньшая вероятность возникновения исключений типа DBConcurrencyException

да и не забывайте, если просто поставить проверку на ID , и не сформировать политику обновления записей, то увеличивается вероятность потери данных.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Зачем такой сложный запрос UPDATE?
    #34103753
eLVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sa
да и не забывайте, если просто поставить проверку на ID , и не сформировать политику обновления записей, то увеличивается вероятность потери данных.

Код: plaintext
 uid  =  S a



Вот мой слегка модифицированный Update для адаптера

Код: plaintext
1.
2.
3.
4.
5.
6.
public void SmartUpdate(DataTable table, out int deleted_count, out int updated_count, out int inserted_count)
        {
            deleted_count = this.m_Adapter.Update(table.Select("", "", DataViewRowState.Deleted));
            updated_count = this.m_Adapter.Update(table.Select("", "", DataViewRowState.ModifiedCurrent));
            inserted_count = this.m_Adapter.Update(table.Select("", "", DataViewRowState.Added));
        }

Во всех таблицах, которые могут изменяться пользователем, я использую ID int с IDENTITY(1,1). Соответственно настроены и связи между таблицами в DataSet (Update Rule = Cascade), поскольку здесь самое "интересное" место это INSERT.

Раньше (с UPDATE по умолчанию) при обновлении адаптера программа периодически падала с DbConcurrencyException как раз на строке updated_count = this.m_Adapter.Update(table.Select("", "", DataViewRowState.ModifiedCurrent)) . После правки команды подобного глюка не было.

Хотелось бы поподробнее узнать про ситуации, когда UPDATE с проверкой единственного ID может привести к порче данных.

Спасибо.
...
Рейтинг: 0 / 0
Зачем такой сложный запрос UPDATE?
    #34105411
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eLVik
Хотелось бы поподробнее узнать про ситуации, когда UPDATE с проверкой единственного ID может привести к порче данных.

например, два пользователя правят запись. в Вашем случае, изменения последнего сотрут изменения первого. Если политика обновления "кто последний тот и папа" применима для вашего приложения, то проблем нет :-)

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Зачем такой сложный запрос UPDATE?
    #34105438
eLVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sa
например, два пользователя правят запись. в Вашем случае, изменения последнего сотрут изменения первого. Если политика обновления "кто последний тот и папа" применима для вашего приложения, то проблем нет :-)

Код: plaintext
 uid  =  S a
Posted via ActualForum NNTP Server 1.3

Пользователь будет видеть свой набор ID-ов, который не должен пересекаться с ID-ами другого пользователя.

Думаю, что одновременная правка записи привнесет только путаницу.
Даже если и возникнет подобная задача, первый пользователь должен будет заблокировать свои записи.
...
Рейтинг: 0 / 0
Зачем такой сложный запрос UPDATE?
    #34107218
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
eLVik
Пользователь будет видеть свой набор ID-ов, который не должен пересекаться с ID-ами другого пользователя.
Думаю, что одновременная правка записи привнесет только путаницу.
Даже если и возникнет подобная задача, первый пользователь должен будет заблокировать свои записи.

если для вас это не проблема, то нет вопросов.
мне непонятно про "свой набор ID-ов" - это скорее всего специфика вашего приложения.

А про блокировки, не всегда такой вариант приемлем - ужасная ситуация когда пользователь наложил блокировку и уснул... :-)))

ИМХО почти универсальное решение в этом случае: ID + Timestamp.

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Зачем такой сложный запрос UPDATE?
    #34117345
eLVik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sa
если для вас это не проблема, то нет вопросов.
мне непонятно про "свой набор ID-ов" - это скорее всего специфика вашего приложения.

А про блокировки, не всегда такой вариант приемлем - ужасная ситуация когда пользователь наложил блокировку и уснул... :-)))

ИМХО почти универсальное решение в этом случае: ID + Timestamp.


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


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