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

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

23.07.2012, 21:26. Показов 11803. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
сукцессия 41
anaschu 24.07.2026
Численная верификация бифуркации в агентной модели лесной сукцессии: от одного параметра к ансамблю Автор: пользователь @Shumilov_AS | Раздел: Прикладная математика / Численные методы Кратко. . .
сукцессия 40. Ансамблевая кластерная параметризаци, часть 1.
anaschu 24.07.2026
Пр# Сопровождение научной статьи ИИ-ассистентом: подготовка публикации и калибровка агентно-ориентированной модели сукцессии микоризных систем **Полевые заметки о двухнедельной совместной работе**. . .
Теория всего 12. ВГК на планете в стратегической игре "терра"
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru