MHD Salim Al-Tarsha Ответов: 1

Как обновить источник данных при его обновлении ?


Привет
я разработал приложение c#, которое подключается к sql server
моя база данных sql server содержит около 20 таблиц.
пользователь (1) запрашивает записи таблицы, приложение подключается к серверу и выполняется sql-команда для заполнения данных в gridview
проблема заключается в том , что когда другой пользователь(2) обновляет ту же таблицу, что и пользователь(1), изменения не отражаются на GridView пользователя(1).

заранее спасибо за ваш ответ.

Что я уже пробовал:

я пробовал класс c# sqldependency с помощью Service broker, но это не очень помогло мне, потому что sqldependency используется для мониторинга одной команды sql
я хочу отслеживать любые изменения, произошедшие с таблицей, и уведомлять всех пользователей об обновлении источника данных и пополнении datagridview

часть кода, который я использовал :

запуск SQL зависимостей :

SqlDependency depend = new SqlDependency(cmd);
            depend.OnChange += new OnChangeEventHandler(OnDependencyChange);
            cmd.Notification = null;
            SqlDependency.Start(sqlcon.ConnectionString.ToString());


OnDependencyChange :

void OnDependencyChange(object sender, SqlNotificationEventArgs e)
        {
            SqlDependency dependency = sender as SqlDependency;
            dependency.OnChange -= new OnChangeEventHandler(OnDependencyChange);
            MessageBox.Show("table is altered");
        }

1 Ответов

Рейтинг:
5

#realJSOP

Вы должны установить его сами. Одним из способов было бы иметь таблицу аудита, которая хранит информацию об изменениях в таблице. Я бы, вероятно, пошел со следующей схемой:

LastChanged типа datetime
Имя таблицы nvarchar(64)

и напишите сохраненный proc, который возвращает количество записей, добавленных для указанной таблицы после указанной даты и времени. Если счетчик равен 0, приложению ничего не нужно делать. Если счетчик равен >= 1, Сделайте что-нибудь в приложении.


MHD Salim Al-Tarsha

спасибо за ваш ответ , это действительно полезно
но я думаю, что буду использовать блокировки базы данных
когда я хочу обновить запись, она блокируется до тех пор, пока я не закончу редактирование
раз спасибо