Как обновить страницу при изменении записи в таблице базы данных в ASP.Net 3.5 - PullRequest
1 голос
/ 17 сентября 2009

У меня есть страница, которая содержит Gridview, показывающий запись из таблицы базы данных, например, "TblEmployee". Если в эту таблицу вставлена ​​/ обновлена ​​/ удалена запись, то мне нужно перезагрузить страницу, чтобы в сетке отображались обновленные записи. Записи могут быть вставлены / обновлены / удалены из любого другого приложения. Чтобы заново привязать сетку, я должен перезагрузить страницу. Предположим, я открываю страницу в своем браузере, и постбэк не выполняется. Через 10 минут запись вставляется в таблицу некоторыми другими приложениями. Как я могу перезагрузить страницу автоматически, а не вручную, нажав кнопку обновления, когда записи в таблице БД изменились? Я использую Sql server 2005 в качестве БД и ASP.Net 3.5 (C #)

Пожалуйста, предложите, как это реализовать.

Спасибо.

Ответы [ 3 ]

2 голосов
/ 17 сентября 2009

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

Создать таблицу со столбцами для имени таблицы и даты последнего обновления. Создайте триггер на tblEmployee для обновления этой таблицы при любой вставке / обновлении / удалении.

Когда страница загружена, вы хотите сохранить текущую дату последнего обновления таблицы. В зависимости от того, как настроена ваша страница, вы можете сохранить ее в ViewState или как скрытое поле на странице. Тогда вам нужно будет опросить изменения. Есть много способов сделать это. Вы можете написать простой метод страницы, который возвращает дату последнего обновления, вызвать его из JavaScript и сравнить с датой, сохраненной в скрытом поле. Или вы можете использовать UpdatePanel с элементом управления Timer и сравнить со значением, которое вы сохранили в ViewState.

Теперь этот подход попадает в базу данных больше, чем необходимо. Если это проблема, используйте SqlDependency с SQL 2005 или выше. Создайте SqlDependency и вставьте текущую дату в Cache с этим объектом зависимости. Опросите этот элемент кэша со страницы, как описано выше. При изменении зависимости (событие OnChange) снова обновите дату элемента кэша.

1 голос
/ 17 сентября 2009

Я не вижу другого варианта, который бы имел механизм опроса, то есть, используя setTimeout + jQuery или ASP.NET AJAX Timer, который извлекает информацию с интервалами.

В основном вы хотите, чтобы сервер уведомлял клиента о том, что произошло обновление, и в приложении web / ASP.NET клиент всегда инициирует связь. Так что опрос - ваш единственный вариант.

1 голос
/ 17 сентября 2009

Вы можете использовать класс SqlDependency:

Вот пример для начала работы: SqlDependency в приложении ASP.NET (ADO.NET)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...