Обновление базы данных SQL в режиме реального времени между несколькими клиентами VB.NET

Я использую базу данных SQL и пишу клиентское приложение VB.NET. Это приложение используется на нескольких компьютерах одновременно. Если один из клиентов обновляет базу данных, я хотел бы, чтобы другие клиенты знали об этом обновлении.


person Marcel    schedule 31.05.2010    source источник
comment
Какую СУБД вы используете? Также я предполагаю, что вы имеете в виду уведомление, прежде чем они попытаются обновить, а не просто обнаружение нарушений параллелизма?   -  person Martin Smith    schedule 31.05.2010


Ответы (4)


Если вы используете MS SQL Server, вы могли бы использовать уведомления Service Broker отправить уведомление клиентам, когда данные будут обновлены. Это не то, что у меня есть личный опыт использования, хотя.

person Martin Smith    schedule 31.05.2010

  1. Убедитесь, что в вашей таблице есть столбец DateUpdated.
  2. При чтении таблицы сохраните значение dateUpdated в переменную памяти.
  3. При обновлении таблицы укажите DateUpdated ‹=
  4. Проверьте количество строк, обновленных на шаге 3.
  5. Если шаг 4 возвращает 0, это означает, что кто-то еще обновил историю, пока текущий пользователь просматривал данные.

Обратите внимание, что это применимо только в том случае, если вы заинтересованы в обнаружении обновлений при сохранении данных. Если вы хотите, чтобы клиентское приложение было уведомлено, если отображаемая в данный момент запись была обновлена, тогда, как уже упоминалось, вам придется использовать какие-то службы уведомлений.

person Raj    schedule 31.05.2010
comment
Должно быть, я только что добавил это как вопрос к ОП одновременно с вашим ответом! - person Martin Smith; 31.05.2010
comment
Здравствуйте, Радж, я хотел бы, чтобы клиенты знали о любых изменениях в базе данных. Как было сказано выше, службы уведомлений выглядят бесполезно из-за частоты обновления в часы пик (каждые 5 секунд). Может быть, у вас есть другие идеи? - person Marcel; 01.06.2010
comment
Ну, я не полностью прочитал эту ссылку msdn.microsoft.com/en-us /library/cc998491.aspx, но он говорит, что что-то распространяет запросы LINQ и подписку/фильтрацию и т. д. - person Raj; 01.06.2010

Оглядевшись, я нашел полезную информацию о Service Broker. Я также прочитал следующее;

«Уведомление о запросах предназначено для данных, которые не меняются часто. Его также лучше всего использовать в серверных приложениях (таких как ASP.NET или удаленное взаимодействие), а не в клиентских приложениях (таких как Windows Forms). Помните, что каждый запрос на уведомление регистрируется в SQL Server. Если у вас есть множество клиентских приложений, каждое из которых запрашивает уведомление, это может создать проблему с ресурсами на вашем сервере. ограничьте использование уведомления о запросе не более чем десятью одновременными пользователями».

Это меня беспокоит, потому что у меня есть около 10 таблиц, которые обновляются довольно часто (каждые 5 секунд).

Может быть, у кого-то есть опыт использования уведомлений Service Broker для более часто меняющихся данных.

Большое спасибо!

Марсель

person Marcel    schedule 31.05.2010
comment
Согласитесь, тогда это не звучит особенно полезно для вашего сценария. Кстати, в Stack Overflow вопросы и ответы разделены, поэтому вам следует отредактировать эту дополнительную информацию в вопросе, а не публиковать ее как ответ! - person Martin Smith; 01.06.2010
comment
Прошу прощения, Мартин, за неправильное использование... :) Может быть, у вас есть какие-то другие идеи на этот счет? Есть ли какие-либо другие варианты, которые можно использовать вместо уведомлений Service Broker? Спасибо, Марсель - person Marcel; 01.06.2010
comment
@ Марсель Не совсем. Если вы не можете получать push-уведомления, я полагаю, что ваши приложения должны опросить саму базу данных и сравнить ее с отметкой времени или полем даты и времени, чтобы найти записи, которые изменились. - person Martin Smith; 01.06.2010

У меня такая же проблема. Мое решение состояло в том, чтобы создать таблицу аудита! Таблица аудита содержит все имена таблиц и еще один столбец с датой и временем.

Когда пользователь меняет данные, также обновляется дата и время в таблице аудита.

Все пользователи проверяют каждые 4 секунды таблицу аудита. Если одна из таблиц была обновлена, пользователь перезагружает всю таблицу так, как она была обновлена.

Извините за мой английский.

person Eli    schedule 02.12.2013