Допустим, есть некоторая программа, которая что то делает с базой. Пользователи могут запускать ее на разных машинах. Можно ли сделать так, что бы не смотря на то, что программы работают на разных машинах, что бы несмотря на это могла работать только 1 программа. Была мысль эксклюзивно блокировать таблицы, но может быть ещё решения? Запускаются программы от 1 учетки. Может быть программа, как то может идентифицировать своё соединение например названием программы, а другой экземпляр мог бы проверить не ют ли уже соединений?
Да, название программы можно передать через соединение
string connStr = ConfigurationManager.ConnectionStrings["AWConnection"].ToString();
SqlConnectionStringBuilder sb = new SqlConnectionStringBuilder(connStr);
sb.ApplicationName = "MySuperApp";
SqlConnection conn = new SqlConnection(sb.ToString());
//ну и далее...
А потом уже в SQL Server можно сделать запрос к sys.dm_exec_session и в столбце program_name обнаружить название нашей проги, а столбце login_time время начала сессии.
Пусть программа каждые скажем 5 сек отправляет в базу какие нибудь данные с уникальным ключем, и при присутствии этих данных другие клиенты не смогут работать.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости