|
|
|
Зачем такой сложный запрос 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:13 |
|
||
|
Зачем такой сложный запрос UPDATE?
|
|||
|---|---|---|---|
|
#18+
Правильные рассуждения. eLVik Или есть что-то, о чем я не догадываюсь? ИМХО, это сделано специально, выбран унифицированный подход, с наиболее полной идентификацией изменяемой строки. Where надо менять обязательно так как нужно Вам . Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 12:47 |
|
||
|
Зачем такой сложный запрос UPDATE?
|
|||
|---|---|---|---|
|
#18+
eLVik + меньшая вероятность возникновения исключений типа DBConcurrencyException да и не забывайте, если просто поставить проверку на ID , и не сформировать политику обновления записей, то увеличивается вероятность потери данных. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.11.2006, 12:52 |
|
||
|
Зачем такой сложный запрос 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 может привести к порче данных. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 12:37 |
|
||
|
Зачем такой сложный запрос UPDATE?
|
|||
|---|---|---|---|
|
#18+
eLVik Хотелось бы поподробнее узнать про ситуации, когда UPDATE с проверкой единственного ID может привести к порче данных. например, два пользователя правят запись. в Вашем случае, изменения последнего сотрут изменения первого. Если политика обновления "кто последний тот и папа" применима для вашего приложения, то проблем нет :-) Код: plaintext Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2006, 00:49 |
|
||
|
Зачем такой сложный запрос UPDATE?
|
|||
|---|---|---|---|
|
#18+
Sa например, два пользователя правят запись. в Вашем случае, изменения последнего сотрут изменения первого. Если политика обновления "кто последний тот и папа" применима для вашего приложения, то проблем нет :-) Код: plaintext Пользователь будет видеть свой набор ID-ов, который не должен пересекаться с ID-ами другого пользователя. Думаю, что одновременная правка записи привнесет только путаницу. Даже если и возникнет подобная задача, первый пользователь должен будет заблокировать свои записи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2006, 02:33 |
|
||
|
Зачем такой сложный запрос UPDATE?
|
|||
|---|---|---|---|
|
#18+
eLVik Пользователь будет видеть свой набор ID-ов, который не должен пересекаться с ID-ами другого пользователя. Думаю, что одновременная правка записи привнесет только путаницу. Даже если и возникнет подобная задача, первый пользователь должен будет заблокировать свои записи. если для вас это не проблема, то нет вопросов. мне непонятно про "свой набор ID-ов" - это скорее всего специфика вашего приложения. А про блокировки, не всегда такой вариант приемлем - ужасная ситуация когда пользователь наложил блокировку и уснул... :-))) ИМХО почти универсальное решение в этом случае: ID + Timestamp. Код: plaintext Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.11.2006, 15:34 |
|
||
|
Зачем такой сложный запрос UPDATE?
|
|||
|---|---|---|---|
|
#18+
Sa если для вас это не проблема, то нет вопросов. мне непонятно про "свой набор ID-ов" - это скорее всего специфика вашего приложения. А про блокировки, не всегда такой вариант приемлем - ужасная ситуация когда пользователь наложил блокировку и уснул... :-))) ИМХО почти универсальное решение в этом случае: ID + Timestamp. ну скажем так... предполагается, есть ряд офисов, все значимые данные данные (кроме справочных и служебных) можно отнести только к одному офису... таким образом пользователь одного офиса не может отредактировать данные, принадлежащие другому офису. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.11.2006, 18:40 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=34105411&tid=1353073]: |
0ms |
get settings: |
6ms |
get forum list: |
12ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
50ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
33ms |
get tp. blocked users: |
1ms |
| others: | 200ms |
| total: | 315ms |

| 0 / 0 |
