отображение обновления данных для нескольких пользователей, которое вставляется другим пользователем - PullRequest
2 голосов
/ 07 марта 2011

Мне нужно немедленно показать обновленные данные пользователю, когда он вводит данные в базу данных, то есть в режиме онлайн.

Я использую сервер sql и создаю приложение winform для c # .net. приложение будет использоваться в локальной сети 3 пользователями, U1, U2, U3.

пользователи будут вводить данные в таблицу ITEMS с помощью приложения, и, когда U2 нажимает кнопку вставки, он должен просматривать обновленные данные в той же форме внизу в виде таблицы или в другом месте, а также, U1, U3 также автоматически видеть обновленную таблицу на своих ПК в приложении.

как мне это сделать?

U1, U2, U3 открыли приложение.

U2 перешел к форме ВСТАВИТЬ элементы.

U1, U3 на форме просмотра элементов.

Я хочу, чтобы, когда U2 вставлял данные, затем автоматически отображалось представление сетки приложения U1, U3, и они могли видеть новые данные, вставленные U2, в таблицу ITEMS. им даже не нужно обновлять или повторно открывать форму просмотра элементов.

Триггер должен использоваться в таблице ITEMS. Есть ли способ избежать триггеров здесь?

Ответы [ 3 ]

3 голосов
/ 07 марта 2011

Вам не нужен триггер (по крайней мере, не для описанной цели).

Обычной практикой является реализация возможности обновления по требованию (обычно F5).

Немного абсурдно постоянно обновлять базу данных на ПК или экранах. Рассмотрим сетевой трафик. Учтите, что никто не может прочитать экран, когда U1 или U2 ответят на звонок, пойдут на ланч или на перерыв. Возможность обновления по требованию более разумна.

Кроме того, если вам необходимо реализовать такую ​​функцию, добавьте в таблицу столбец Last-updated-TimeStamp или DateTime и извлекайте только те строки, которые были обновлены с момента последнего поиска.

Ответ на комментарий

Спасибо.

  1. В каждой таблице добавьте столбец Timestamp или Datetime, который будет иметь название, например UpdatedDateTime. Установите значение по умолчанию GETDATE().

  2. Обновлять этот столбец при каждом обновлении строки. Обратите внимание, что у вас может быть только одно окно данных в фокусе , т.е. спереди все остальные окна не сфокусированы и не видны. Поэтому нет смысла кодировать обновление или автоматическое обновление в каждом окне; только те окна, которые действительно нуждаются в автоматическом обновлении.

  3. На стороне клиента или .NET для каждого окна, которое необходимо обновить, напишите код для кнопки Function-5. Всякий раз, когда F5 активирован, обновляйте окно. Это значит:

    • заполните свой объект List (содержащий логические строки данных) для этого окна:
      <code>SELECT column_list
          FROM table t1
          JOIN join_table t2 ...
          WHERE t1.UpdatedDateTime > @SavedDateTime
          OR    t2.UpdatedDateTime > @SavedDateTime
          ... other_conditions
    • SET @SavedDateTime = GETDATE ()
    • покрасить окно Это позволит избежать перемещения масс данных, которые не изменяются, по сети; и перемещать только те строки, которые изменились в окне. Интеллектуальное обновление.
  4. Проверьте это. Убедитесь, что ручное обновление работает как задумано. Обновите данные на другом ПК, нажмите F5 на этом ПК и убедитесь, что данные в окне изменяются в соответствии с обновлениями; и что теперь окно перекрашивается, когда данные не меняются.

  5. Теперь для автоматического обновления. Напишите бесконечный цикл (всегда плохо новый), который ждет 30 секунд и выполняет код кнопки F5. Теперь убедитесь, что , что работает как задумано.

  6. Если кто-то очень старший хочет, чтобы его окно обновлялось чаще (более 30 секунд), измените этот параметр ожидания на 15 секунд. Если кто-то очень старший хочет, чтобы его окно обновлялось чаще (более 15 секунд), измените этот параметр ожидания на 10 секунд. И так далее. Никогда не устанавливайте время ожидания на 1, 2 или 5 секунд для начала. И разрешите каждому ПК устанавливать собственный период ожидания (большой босс 5 секунд, маленький босс 30 секунд).

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

1 голос
/ 10 марта 2011

Я бы хотел использовать Уведомление о событиях / Сервисный брокер для уведомления клиентов о любых изменениях данных.Нет необходимости опрашивать или обновлять информацию на клиенте.

И более подробно в блоге команды Service Broker

1 голос
/ 07 марта 2011

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

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