|
|
|
Как обновлять таблицу на сервере из DataSet посредством хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Уважаемые специалисты! Дано: Visual Studio 2005, MS SQL 2005, доступ к таблицам на сервере только посредством хранимых процедур, каждая таблица имеет первичный Identity-ключ. Хотелось бы: в Win-форме есть некий грид (родной от MS или DevExpress - не суть важно); при открытии этой формы пользователь видит в гриде записи, далее в гриде он может отредактировать, удалить существующие, добавить новые записи. Наконец, пользователь нажимает кнопку <сохранить>, после чего приложение стучится до сервера БД и в соотвующей серверной таблице добавляются, редактируются, удаляются записи. Хотелось бы услышать best practice (схематичный код) - как обновлять измененения в DataView на серевере БД . В web-приложениях для себя выработал логику, однако в WIN-приложениях она отличается и на данный момент могу ошибаться. Я так полагаю: вариант №1 - из DataView, который привязан к гриду, посредством что-то вроде GetChanges() получаем другой DataView2; в этом DataView2 только новые или отредактированные записи; перебирая в цикле для каждой записи вызываем хранимую процедуру добавления новой или редактирования существующей. Если на сервере для записи всё прошло ок, то для записи в DataSet-е делаем AcceptChange. Но вот как быть с удалёнными записями??? вариант №2 при каждом действии в гриде (добавление, удаление, редактирование), вызываем соотв. хранимую процедуру, и если она отработала успешно, то: - для новой записи в ключевое поле записываем возвращаемое хранимкой значение Identity и фиксируем запись - для отредактированной записи - просто её фиксируем - для удаленной на сервере - удаляем из DataView ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 31.10.2006, 11:34 |
|
||
|
Как обновлять таблицу на сервере из DataSet посредством хранимых процедур
|
|||
|---|---|---|---|
|
#18+
superbluesman вариант №1 - из DataView, который привязан к гриду, посредством что-то вроде GetChanges() получаем другой DataView2; в этом DataView2 только новые или отредактированные записи; перебирая в цикле для каждой записи вызываем хранимую процедуру добавления новой или редактирования существующей. Если на сервере для записи всё прошло ок, то для записи в DataSet-е делаем AcceptChange. Но вот как быть с удалёнными записями??? Можно и так, а какая проблема с удаленными? Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 06:19 |
|
||
|
Как обновлять таблицу на сервере из DataSet посредством хранимых процедур
|
|||
|---|---|---|---|
|
#18+
вопрос: как лучше? правильно ли я мыслю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:05 |
|
||
|
Как обновлять таблицу на сервере из DataSet посредством хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Правильно никто не скажет, нужно знать постановку задачи и т.п.... Если Вас устраивают оба варианта по конечному результату, то ИМХО первый предпочтительнее. А чтобы вообще не заморачиваться, по поводу ручного обхода строк. отдайте сабж на откуп DataAdapter'у, при правильной настройке, он сам проделает описываемые в варианте № 1 действия. Код: plaintext ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:22 |
|
||
|
Как обновлять таблицу на сервере из DataSet посредством хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Собственно постановка и требования заказчика простые: пользователи должны иметь возможно максимально быстро вводить данные в гриде и при нажатии конпку <Сохранить> - таблица на сервере обновляется с учётом всех изменений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.11.2006, 11:34 |
|
||
|
Как обновлять таблицу на сервере из DataSet посредством хранимых процедур
|
|||
|---|---|---|---|
|
#18+
можно посмотреть в сторону диффграм и их парсинга на серваке, благо механизмы позволяют. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.11.2006, 12:05 |
|
||
|
Как обновлять таблицу на сервере из DataSet посредством хранимых процедур
|
|||
|---|---|---|---|
|
#18+
Можно отправлять DataSet в процедуру в виде xml и разбирать уже на сервере. Или как вариант, создать на сервере рабочие таблицы и виды к ним. Разрешения дать только на виды. Далее логика простая - данные сливаем в виды, затем запускаем процедуру, которая из этих видов данные забирает и делает с ними что-то. В рабочей таблице должно быть поле с автозаполнением его каким-то уникальным идентификатором (при однопоточном клиенте - suser_sname(), например), а вид должен фильтровать данные поэтому полю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2006, 15:58 |
|
||
|
|

start [/forum/topic.php?fid=17&msg=34096050&tid=1353077]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
| others: | 227ms |
| total: | 373ms |

| 0 / 0 |
