显示由另一个用户插入的多个用户的数据更新

时间:2011-03-07 07:18:56

标签: c# .net sql sql-server sql-server-2005

我需要在用户输入数据库时​​立即向用户显示更新的数据,即在线视图。

我正在使用sql server并构建一个c#.net winform应用程序。 该应用程序将由3个用户U1,U2,U3在LAN上使用。

用户可以使用应用程序将数据输入到ITEMS表中,当U2单击插入按钮时,他应该在gridview底部的同一Form上查看更新的数据,否则,U1,U3也会在应用程序中自动查看其PC上的更新表。

我该怎么做?

U1,U2,U3已打开该应用程序。

U2已导航到INSERT项目表单。

U1,U3在视图项目表单上。

我希望当U2插入数据时,自动更新U1,U3应用程序上的网格视图,他们可以看到UEM在ITEMS表中插入的新数据。他们甚至不需要刷新或重新打开视图项Form。

必须在ITEMS表上使用触发器。有没有办法在这里避免触发?

3 个答案:

答案 0 :(得分:3)

您不需要触发器(至少不是为了描述的目的)。

通常的做法是实现按需刷新功能(通常为F5)。

让PC或屏幕始终与数据库保持同步是有点荒谬的。考虑网络流量。当U1或U2接听电话,午餐或舒适休息时,请考虑没有人阅读屏幕。按需刷新功能更合理。

此外,如果必须实现此类函数,请将Last-Updated-TimeStamp或DateTime列添加到表中,并仅检索自上次检索以来已更新的行。

对评论的回应

感谢。

  1. 在每个表格中,添加TimestampDatetime列,其名称类似于UpdatedDateTime。设置默认值GETDATE()

  2. 每次更新行时都会更新此列。 请注意,您只能有意义地将一个数据窗口置于焦点,即。在前面,所有其他窗户都没有焦点,无法看到。因此,将刷新或自动刷新编码到每个窗口是没有意义的;只有那些实际需要自动刷新的窗口。

  3. 在客户端或.NET端,对于需要刷新的每个窗口,请编写Function-5按钮的代码。每当激活F5时,刷新窗口。这意味着:

    • 填充该窗口的列表对象(包含逻辑数据行):
      SELECT column_list
          FROM table t1
          JOIN join_table t2 ...
          WHERE t1.UpdatedDateTime > @SavedDateTime
          OR    t2.UpdatedDateTime > @SavedDateTime
          ... other_conditions
    • SET @SavedDateTime = GETDATE()
    • 绘制窗口 这样可以避免在整个网络中移动大量不会改变的数据;并仅将那些已更改的行移动到窗口中。智能刷新。
  4. 测试一下。确保手动刷新按预期工作。更新另一台PC上的数据,在此PC上按F5,并验证窗口中的数据是否发生变化以反映更新;并且当数据没有改变时,窗口现在重新绘制。

  5. 现在进行自动刷新。写一个无限循环(总是坏的新),等待30秒,并执行F5按钮代码。现在检查 是否按预期工作。

  6. 如果某个非常高级的人希望他们的窗口更频繁地刷新(超过30秒),请将等待参数更改为15秒。如果某个非常高级的人希望他们的窗口更频繁地刷新(超过15秒),请将等待参数更改为10秒。等等。切勿将等待时间设置为1或2或5秒。并允许每台PC设置自己的等待期(大老板5秒,小老板30秒)。

  7. 当老板对网络的速度很慢时,向他们展示当没有人坐在电脑前读取窗口时充斥网络的数据包,并建议他们关闭自动刷新。对于实际坐在窗前,手指没有折断的人来说,手动刷新仍然可以使用。

答案 1 :(得分:1)

您可以通过运行一个单独的线程来完成此操作,该线程将在一段时间后继续更新数据。

答案 2 :(得分:1)

我会考虑使用Event Notification/Service broker来通知客户任何数据更改。无需在客户端上进行轮询或刷新。

Service Broker team

的博客上有更详细的信息