Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.85/55: Рейтинг темы: голосов - 55, средняя оценка - 4.85
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54

Многопользовательское приложение

23.07.2012, 21:26. Показов 11666. Ответов 26
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет товарищи программисты! Есть вопрос касательно проектирования приложения WinForms. Планирую создать приложение, многопользовательское приложение, что-то на подобии журнала заявок. Заявка может создаваться, вешаться на конкретных людей, редактироваться, менять свое состояние и т.п.

Вопрос следующий: Каким способом организовать работу приложения с базой данных? Суть вопроса состоит в том, как предотвратить одновременные запросы. То есть, 2 пользователя одновременно открывают заявку, редактируют ее и затем решают сохранить изменения. Разумеется сохранены будут те данные, которые записал пользователь, нажавший на кнопку "Сохранить" позже. Мне следует избежать этой проблемы.

Заранее спасибо!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.07.2012, 21:26
Ответы с готовыми решениями:

Многопользовательское приложение с бд
бъясните пожалуйста, как что происходит. Создал бд в vs2012. Написал клиентское приложение(пока просто коннектится к базе). Как...

Многопользовательское приложение
Добрый день! Необходимо создать многопользовательское приложение для работы с БД. СУБД будет располагаться на сервере. На рабочих...

Многопользовательское приложение бд
Здравствуйте! Я новичок в c# и столкнулся с таким вопросом: имеется форма авторизации, данные берутся из таблиц. У авторизовавшихся...

26
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
25.07.2012, 14:04
Студворк — интернет-сервис помощи студентам
Если транзакционность, или блокировка записи поможет другому (кроме заблокироваашего) приложению понять, что конкретная запись взята редактирование от имени такого-то юзера, это было бы удобным решением. Но я такого способа применения транзакций и блокировок не знаю пока )
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
25.07.2012, 14:05
Цитата Сообщение от Besnywka Посмотреть сообщение
а что в этом запросе на апдейт такого примечательного?
примечательность в том, что если несколько пользователей прочли данные из БД, поменяли их и через некоторое время пытаются сохранить, то сохранение выполниться только для первого пользователя, попытки остальных пользователей произвести сохранение будут безуспешными.
Цитата Сообщение от Besnywka Посмотреть сообщение
Каким образом он влияет на доступность записи для других пользователей?
Никаким. Более того, данный запрос не требует никаких методов блокировки записей (типа транзакций, дополнительных столбцов с учетом занятости строки и т.п.), что несомненно положительно сказывается на производительности и упрощает код для доступа к данным.

Цитата Сообщение от Besnywka Посмотреть сообщение
Разве не сама СУБД ставит блокировку на запись, которая в данный момент изменяется?
СУБД ставит блокировку на обновление данных в момент выполнения запроса, а не в процессе работы. Как я понял ТС это не устраивает, в данном случае никакие дополнительные блокировки не нужны.
2
47 / 47 / 7
Регистрация: 09.06.2012
Сообщений: 148
25.07.2012, 15:01
в принципе косвенно "отловить" работу чужой транзакции возможно. К примеру поставить для вашей транзакции режим блокировки nowait, тогда sql вернет Вам сообщение с ошибкой о возникшем конфликте с более ранней транзакцией.
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
25.07.2012, 18:32
и держать транзакцию открытой пока первый юзер ненаредактируется?
как-то неудобно. я бы остался с вариантом таблички блокировок. Оно и "второму" пользователю можно будет показать, кто держит запись, чтобы он мог пойти и сказать ему, и это уже юзеролюбиво )

А вот для обработки автоматически поступающих данных предложенный Вами подход вполне даже оправдан, и если источник данных напорется на такую блокировку, то это будет сигналом о несогласованности поступающих данных.

По предложению "первый записал остальным ошибка" - это опять таки не юабилитично - гораздо лучше пользователю в момент открытия бланка редактирования сделать его readonly, и сказать, что такой-то уже редактирует эту запись, чем торжественно обломать пользователя после того, как он, потратив время и силы, заполнит много полей данных и радостно нажмёт кнопку "сохранить". Да и много WHERE предполагает индексы по всем контролируемым полям (тормоза при вставке), либо тормоза при обновлении, что тоже не всегда приемлемо.

Короче, все технологии и подходы хороши, но у каждой есть своя областть оптимальной применимости.
1
47 / 47 / 7
Регистрация: 09.06.2012
Сообщений: 148
25.07.2012, 20:20
ksk, согласна с Вами насчет юзабилити. Но все–таки насчет транзакций хочу добавить, что транзакция будет выполняться единожды при каждом сохраннии данных. При плвторном редактировании производится уже следующая (новая) транзакция, так что из–зяа одного пользователя вся работа не встанет. А транзакцию без ожидания при ее прерывании можно перезапустить. И ообще, насколько я знаю, по умолчанию любая операция с данными рассматртвается СУБД в качестве транзакции с ожиданием
0
3 / 3 / 0
Регистрация: 11.07.2012
Сообщений: 54
25.07.2012, 21:18  [ТС]
ksk, как не крути но самый оптимальный вариант это твой. И прозрачен и универсален и легко расширяем.

Но всем остальным тоже спасибо, есть над чем поразмыслить!
0
 Аватар для ksk
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
25.07.2012, 22:24
Besnywka, всё правильно. Только я не понял, что в Вашем варианте будет делаться между чтением данных и их записью, в то время, пока пользователь будет редактировать данные в окне программы. Что должно в это время защитить другого пользователя от того, чтобы он начал редактировать эту же запись?

Клиент должен держать открытую транзакцию из окна редактирования?
В принципе это должен быть работоспособный вариант (правда, я не пробовал так делать).
И я не знаю, что будет, если в этот момент отключат питание клиенту / порвётся сеть итд.
Сервер просто удалит из transaction_log незакоммиченную транзакцию и разблокирует запись?

Kilimangaro, рад, если оно было полезным. Другие методы тоже существуют, но я сторонник "ручной работы" именно в силу гибкости такого подхода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.07.2012, 22:24
Помогаю со студенческими работами здесь

Многопользовательское приложение, работающее с одной БД
Добрый день. Имеется microsoft visual c# 2010 и sql server 2008 express. Задача состоит в написании приложения которое будет...

Многопользовательское приложение и работа с локальными БД
Пишу многопользовательское приложение типа записной книжки, представляющую собой базу контактов и информацию по ним (имя, фамилия, телефон...

Многопользовательское приложение для работы с БД SQL Server
Собственно проблема в том, что мне нужно 3 вида пользователя: Админ, Редактор БД, Пользователь. При входе в программу пользователь...

Скомпилировать приложение так, чтобы другое приложение было у него в ресурсах
Хочу написать программу-компилятор, в которой нужно указать файл, и она скомпилирует другую программу, с указанным в ней файлом в качестве...

Многопользовательское приложение
Доброго времени суток. Требуется создать приложение на Delphi 7 с использованием базы данных Interbase 6.5. Приложение будет установлено на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru