powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сохранение отложенных изменений при многопользовательской работе
18 сообщений из 18, страница 1 из 1
Сохранение отложенных изменений при многопользовательской работе
    #33599383
mix451
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Помогите разобраться со следующей проблемой: например, 2 пользователя работают с одной записью, 1ый вносит изменения, нажимает кнопку Сохранить, в БД происходят сохранения, все ок! 2ой пользователь пытается изменить ту же запись (дополнить своей информацией, а дополнить он должен - таково задание). При этом, когда он нажимает Сохранить вылетает exception с сообщением о том что запись уже изменена (версия записи dataSet не соответстует версии в БД). Я прочитал про различные стратегии обновления данных и понял, что мне подходит Оптимистическая стратегия, которая в принципе используется по-умолчанию.
Подскажите как правильно решить проблему конкуренционного обновления данных!
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33599708
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимистическая стратегия проверят соответсвие полей в базе данных. Это понятно. Так вот - автоматом дизайнер подстваляет все поля для проверки. Нипиши сам адаптер в котором укажи только нужные поля для проверки.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
private OleDbDataAdapter GetAdapter(OleDbConnection connection, OleDbTransaction MyTran)
{
	OleDbDataAdapter da = new OleDbDataAdapter();
	OleDbCommand cmd;
	s = "UPDATE Vtable SET v1 = ? where v2=? and v2=? ";
	cmd = new OleDbCommand(s, connection);
	cmd.Parameters.Add("v1",OleDbType.VarChar,  9 , "v1");
	parm = cmd.Parameters.Add("@v2",OleDbType.VarChar,  5 , "v2");
	parm.SourceVersion = DataRowVersion.Original;
	parm = cmd.Parameters.Add("@v3",OleDbType.VarChar,  2 , "v3");
	parm.SourceVersion = DataRowVersion.Original;
	cmd.Transaction = MyTran;
	da.UpdateCommand = cmd;
	return da;
}
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33599781
mix451
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ, но как я понял это уже стратегия по принципу "последний победивший".. Т.е. запись, внесенная последним пользователем, будет отображена в БД, а предыдущее ее состояние будет перезаписано, кроме ключевый полей. Я правильно понял?
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33599839
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Точно, я на путал. Реализация оптимистической зависти от БД. Какая у Вас?
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33599846
mix451
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sql server 2000
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33599867
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://www.zarech.ru/develop/Public/PessimisticLocking.asp
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33599876
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
предудущий исходник - это оптимистеческая, в статье пессимистическая.
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33599928
mix451
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
дело, как я понимаю, не в описании запроса Update. оптимистическая стратегия вылетает эксепшеном, мне нужно правильно отреагировать, т.е. не писать типа MessageBox.Show("Запись изменена др. польз-м") и заливать методом Fill все данные заного, а внести изменения в БД, но не затирая тех данных, что добавил др. юзер, чтоб юзер не почувствовал никаких проблем (для него это должно быть прозрачно).
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33599999
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пас, совсем не понятно что тебе нужно. ExecuteNonQuery - будет "последний победивший" (это так, к примеру). Если же ты хочешь обновить только те поля которые не изменены пользователем, то имхо нужно писать уже анализатор(тогда карты в руки и вперед - оригинальный значения у тебя есть, сравниваешь оригинальное значение со значениеми из базы, если равно апдейтишь, а нет - ну на нет и суда нет:) ). Вообщем не совсем понятно.
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33600005
mix451
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы сталкивались с проблемой многопользовательского доступа в бд, когда Вы хотите изменить запись, а она уже изменена другим пользователем?
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33600065
mix451
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если да, то как Вы ее решали? Полной перезаписью что-ли?
я поясню, у меня программа должна автоматизировать процесс исполнения поручений на предприятии.
пользователям руководство говорит, что нужно сделать, на одно поручение может быть несколько пользователей. после исполнения поручения, юзеры пишут руководству отчет о проделанной работе (поле в таблице Результат). так вот мне нужно, чтобы это поле могли дополнять информацией все пользователи, которым поручено выполнить данное поручение. информация в dataSet загружается один раз при запуске программы, по мере сохранения изменений данные передаются в бд. если 1 юзер изменит содержимое поля Результат и в этот же день, например, 2 юзер тоже захочет добавить своей информации, то генерируется исключение DBConcurrencyException. Как быть?
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33600141
f45f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С такой задачей не приходилось сталкиваться. Но вижу это так. Перед обновлением блокируешь нужную запись в таблице, Модифицируешь свой Результат = Select Результат из базы + Результат, апдейтишь, разблокируешь. Все в одной транзакции. А для того что бы избавиться от DBConcurrencyException перепиши адаптер как я и показывал. Хотя реально причина Exception может быть в другом. Например когда ты обновляешь в не том порядке связанные таблицы.
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33600154
mix451
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
хорошо, попробую.. спасибо, что пытался помочь!
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33600590
Hratchia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mix451если да, то как Вы ее решали? Полной перезаписью что-ли?
я поясню, у меня программа должна автоматизировать процесс исполнения поручений на предприятии.
пользователям руководство говорит, что нужно сделать, на одно поручение может быть несколько пользователей. после исполнения поручения, юзеры пишут руководству отчет о проделанной работе (поле в таблице Результат). так вот мне нужно, чтобы это поле могли дополнять информацией все пользователи, которым поручено выполнить данное поручение. информация в dataSet загружается один раз при запуске программы, по мере сохранения изменений данные передаются в бд. если 1 юзер изменит содержимое поля Результат и в этот же день, например, 2 юзер тоже захочет добавить своей информации, то генерируется исключение DBConcurrencyException. Как быть?

создай таблицу отчетов и будет тебе счастье:)
и пускай каждый редактирует свой отчет
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33600604
mix451
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
какая таблица отчетов? у меня есть таблица Orders, которая содержит все атрибуты док-та (приказы, поручения, распоряжения, ...) - вот ее и редактируют пользователи (рег.номер док-та, даты различные, содержание, рез-т выполнения, примечание, ...).
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33601077
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mix451
....
различные
стратегии обновления данных и понял, что мне подходит Оптимистическая стратегия,
которая в принципе используется по-умолчанию.
Подскажите как правильно решить проблему конкуренционного обновления данных!
....


Много чего здесь написали в основном не по делу.
OFF:
если в топе приведены ссылки на организацию пессимистического управления блокировками, то следует дать ссылку на тему от 23 февраля:
http://www.sql.ru/forum/actualthread.aspx?tid=265284

Что касается оптимического управления блокировками,
1) то что предлагает мастер-конфигуратор DataAdapter использовать нельзя. По всей видимости проблема автора топа.

2) Если в where оставить только id, то как уже отмечалось это приведет к потере данных - работает принцип - "Кто последний тот и папа" :-)

3) Для MS SQL можно пойти путем использования поля типа timestamp - в поле этого типа содержатся данные уникальные в пределах БД и значения этого поля изменяется при каждом его обновлении . Следовательно, добавив timestamp в where (id, и timestamp) мы предотвратим перезапись изменений другого юзера и вышеописанный принцип про "папу" уже не сработает.

Резюме: Для разрешения возможных конфликтов параллельного изменения данных в вашем приложении при использовании MS SQL 2000 см. в сторону timestamp.

Код: plaintext
 uid  =  S a

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33612781
Mike Evteev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дык он спрашивает о разруливании конфликта. Timestamp это средство обнаружения конфликта, но есть и другие.

Насколько я понимаю в стандартных MS DataSet все не очень хорошо с этим.
Очень им далеко до Midas. Борланд выкатил новые BDPProvider с улучшенной поддержкой.

Ну начать можно отсюда
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dndive/html/data11082001.asp

Все как обычно нужно копаться в полях после обновления, сравнивать значения и перечитывать записи. Потом их обновлять повторно, если запись изменилась на сервере. Кажется даже есть готовые методы фильтрации для этих целей.
...
Рейтинг: 0 / 0
Сохранение отложенных изменений при многопользовательской работе
    #33632991
leo Resh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начать хорошо бы с простейшей нормализации БД...
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Сохранение отложенных изменений при многопользовательской работе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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