Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Как обновлять таблицу на сервере из DataSet посредством хранимых процедур  [new]
superbluesman
Member

Откуда:
Сообщений: 1017
Уважаемые специалисты!

Дано: 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 окт 06, 11:34    [3334344]     Ответить | Цитировать Сообщить модератору
 Re: Как обновлять таблицу на сервере из DataSet посредством хранимых процедур  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
superbluesman

вариант №1

- из DataView, который привязан к гриду, посредством что-то вроде GetChanges() получаем другой DataView2; в этом DataView2 только новые или отредактированные записи; перебирая в цикле для каждой записи вызываем хранимую процедуру добавления новой или редактирования существующей. Если на сервере для записи всё прошло ок, то для записи в DataSet-е делаем AcceptChange.

Но вот как быть с удалёнными записями???

Можно и так, а какая проблема с удаленными?

uid = Sa
1 ноя 06, 06:19    [3338673]     Ответить | Цитировать Сообщить модератору
 Re: Как обновлять таблицу на сервере из DataSet посредством хранимых процедур  [new]
superbluesman
Member

Откуда:
Сообщений: 1017
вопрос: как лучше? правильно ли я мыслю?
1 ноя 06, 11:05    [3339570]     Ответить | Цитировать Сообщить модератору
 Re: Как обновлять таблицу на сервере из DataSet посредством хранимых процедур  [new]
Sa
Member

Откуда: Ekaterinburg
Сообщений: 4019
Правильно никто не скажет, нужно знать постановку задачи и т.п....

Если Вас устраивают оба варианта по конечному результату, то ИМХО первый предпочтительнее.

А чтобы вообще не заморачиваться, по поводу ручного обхода строк. отдайте сабж на откуп DataAdapter'у, при правильной настройке, он сам проделает описываемые в варианте № 1 действия.

uid = Sa
1 ноя 06, 11:22    [3339742]     Ответить | Цитировать Сообщить модератору
 Re: Как обновлять таблицу на сервере из DataSet посредством хранимых процедур  [new]
superbluesman
Member

Откуда:
Сообщений: 1017
Собственно постановка и требования заказчика простые:

пользователи должны иметь возможно максимально быстро вводить данные в гриде и при нажатии конпку <Сохранить> - таблица на сервере обновляется с учётом всех изменений
1 ноя 06, 11:34    [3339857]     Ответить | Цитировать Сообщить модератору
 Re: Как обновлять таблицу на сервере из DataSet посредством хранимых процедур  [new]
zz118
Member

Откуда:
Сообщений: 477
можно посмотреть в сторону диффграм и их парсинга на серваке, благо механизмы позволяют.
3 ноя 06, 12:05    [3352584]     Ответить | Цитировать Сообщить модератору
 Re: Как обновлять таблицу на сервере из DataSet посредством хранимых процедур  [new]
Roman S. Golubin
Member

Откуда: 140002
Сообщений: 11541
Можно отправлять DataSet в процедуру в виде xml и разбирать уже на сервере.

Или как вариант, создать на сервере рабочие таблицы и виды к ним. Разрешения дать только на виды. Далее логика простая - данные сливаем в виды, затем запускаем процедуру, которая из этих видов данные забирает и делает с ними что-то.
В рабочей таблице должно быть поле с автозаполнением его каким-то уникальным идентификатором (при однопоточном клиенте - suser_sname(), например), а вид должен фильтровать данные поэтому полю.
4 ноя 06, 15:58    [3356920]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить