
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
02.11.2006, 12:13
|
|||
|---|---|---|---|
Зачем такой сложный запрос UPDATE? |
|||
|
#18+
Всем привет. Просто любопытно... По умолчанию 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 Или есть что-то, о чем я не догадываюсь? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.11.2006, 12:47
|
|||
|---|---|---|---|
Зачем такой сложный запрос UPDATE? |
|||
|
#18+
Правильные рассуждения. eLVik Или есть что-то, о чем я не догадываюсь? ИМХО, это сделано специально, выбран унифицированный подход, с наиболее полной идентификацией изменяемой строки. Where надо менять обязательно так как нужно Вам . Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
02.11.2006, 12:52
|
|||
|---|---|---|---|
Зачем такой сложный запрос UPDATE? |
|||
|
#18+
eLVik + меньшая вероятность возникновения исключений типа DBConcurrencyException да и не забывайте, если просто поставить проверку на ID , и не сформировать политику обновления записей, то увеличивается вероятность потери данных. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
03.11.2006, 12:37
|
|||
|---|---|---|---|
Зачем такой сложный запрос UPDATE? |
|||
|
#18+
Sa да и не забывайте, если просто поставить проверку на ID , и не сформировать политику обновления записей, то увеличивается вероятность потери данных. Код: plaintext Вот мой слегка модифицированный Update для адаптера Код: plaintext 1. 2. 3. 4. 5. 6. Во всех таблицах, которые могут изменяться пользователем, я использую ID int с IDENTITY(1,1). Соответственно настроены и связи между таблицами в DataSet (Update Rule = Cascade), поскольку здесь самое "интересное" место это INSERT. Раньше (с UPDATE по умолчанию) при обновлении адаптера программа периодически падала с DbConcurrencyException как раз на строке updated_count = this.m_Adapter.Update(table.Select("", "", DataViewRowState.ModifiedCurrent)) . После правки команды подобного глюка не было. Хотелось бы поподробнее узнать про ситуации, когда UPDATE с проверкой единственного ID может привести к порче данных. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.11.2006, 00:49
|
|||
|---|---|---|---|
Зачем такой сложный запрос UPDATE? |
|||
|
#18+
eLVik Хотелось бы поподробнее узнать про ситуации, когда UPDATE с проверкой единственного ID может привести к порче данных. например, два пользователя правят запись. в Вашем случае, изменения последнего сотрут изменения первого. Если политика обновления "кто последний тот и папа" применима для вашего приложения, то проблем нет :-) Код: plaintext Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
04.11.2006, 02:33
|
|||
|---|---|---|---|
Зачем такой сложный запрос UPDATE? |
|||
|
#18+
Sa например, два пользователя правят запись. в Вашем случае, изменения последнего сотрут изменения первого. Если политика обновления "кто последний тот и папа" применима для вашего приложения, то проблем нет :-) Код: plaintext Пользователь будет видеть свой набор ID-ов, который не должен пересекаться с ID-ами другого пользователя. Думаю, что одновременная правка записи привнесет только путаницу. Даже если и возникнет подобная задача, первый пользователь должен будет заблокировать свои записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.11.2006, 15:34
|
|||
|---|---|---|---|
Зачем такой сложный запрос UPDATE? |
|||
|
#18+
eLVik Пользователь будет видеть свой набор ID-ов, который не должен пересекаться с ID-ами другого пользователя. Думаю, что одновременная правка записи привнесет только путаницу. Даже если и возникнет подобная задача, первый пользователь должен будет заблокировать свои записи. если для вас это не проблема, то нет вопросов. мне непонятно про "свой набор ID-ов" - это скорее всего специфика вашего приложения. А про блокировки, не всегда такой вариант приемлем - ужасная ситуация когда пользователь наложил блокировку и уснул... :-))) ИМХО почти универсальное решение в этом случае: ID + Timestamp. Код: plaintext Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
09.11.2006, 18:40
|
|||
|---|---|---|---|
Зачем такой сложный запрос UPDATE? |
|||
|
#18+
Sa если для вас это не проблема, то нет вопросов. мне непонятно про "свой набор ID-ов" - это скорее всего специфика вашего приложения. А про блокировки, не всегда такой вариант приемлем - ужасная ситуация когда пользователь наложил блокировку и уснул... :-))) ИМХО почти универсальное решение в этом случае: ID + Timestamp. ну скажем так... предполагается, есть ряд офисов, все значимые данные данные (кроме справочных и служебных) можно отнести только к одному офису... таким образом пользователь одного офиса не может отредактировать данные, принадлежащие другому офису. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=17&tablet=1&tid=1353073]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
150ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 446ms |

| 0 / 0 |
