Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > MS SQL Server > ограничение на одновременное редактирование


Автор: NotIsClone 22.5.2009, 08:41
суть проблемы: как заблокировать одновременное редактирование одной и той же строки?
написал приложение на шарпах, оно подключается к серверу и можно редактировать и так дали. как сделать блокировку строки? это делать на сервере или у себя в приложении? читал книгу где это описано, но не могу теперь ее найти...

Автор: boevik 22.5.2009, 09:07
Лучше делать при помощи сервера.
т.е., при открывании записи на редактирование установить начало транзакции и выполнить select с update lock
Код

begin tran
select * from t1 with(updlock) where f1=1

после окончания редактирования , выполнить update и закрыть транзакцию
Код

update t1 set f1=1  where f1=1
commit tran


Автор: NotIsClone 22.5.2009, 09:24
сп, а где  можно подробней прочитать об этом?
т.е. мне не до конца понятно что писать и где писать...
fl - это запись?

Автор: boevik 22.5.2009, 09:33
выборка и update показаны  для примера.
в выборке важно установить with(updlock) 
Искать: как в С# определяются начало и конец транзакции.

Автор: NotIsClone 22.5.2009, 09:38
еще раз сп, еще вопрос я храню логин и пароль в конфинг-файле
какую лучше учетку использовать для подключения к серверу? или их использовать несколько, одна для админа, 2я для 2го пользователя и т.д.

Добавлено через 1 минуту и 22 секунды
хотел репу дать дак оказывается мне нужно 100 постов)
а жаль...

Автор: boevik 22.5.2009, 09:48
С# это windows form application или web application?
Если windows form application и клиенты находятся под домайном, то лучше использовать windows authentication при подключении к серверу. Тогда не надо сохранять логин и пароль в конфиг-файле.
Но надо будет каждого пользователя определять в сервере или в window группе.

Автор: NotIsClone 22.5.2009, 09:55
Цитата(boevik @ 22.5.2009,  09:48)
Но надо будет каждого пользователя определять в сервере или в window группе.

С# windows form application
а как определить пользователя на сервере?

Автор: boevik 22.5.2009, 10:23
посмотри пример http://www.configureinstallsetup.com/setup_mssql_dotnetnuke_screenshots
только в 5 шаге надо пометить windows authentication

Автор: NotIsClone 22.5.2009, 10:58
еще вопросик, а при такой реализации можно определять имя пользователя и писать в лог на сервере какие он таблицы просматривал и редактировал?

Автор: boevik 22.5.2009, 11:19
думаю, что можно.
А ещё есть утилитка SQL Profiler, которая записывает все действия на сервере (конечно можно отконфигурировать что бы писала только нужные)

Автор: NotIsClone 22.5.2009, 11:38
Цитата(boevik @ 22.5.2009,  11:19)
думаю, что можно.
А ещё есть утилитка SQL Profiler, которая записывает все действия на сервере (конечно можно отконфигурировать что бы писала только нужные)

спасибо огромное, отправил ПМ, чтоб кинули репу
я просто думал прийдется писать еще одну прогу которая будет писать лог

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)