【问题标题】:displaying updation of data to multiple users which is inserted by another user向多个用户显示由另一个用户插入的数据更新
【发布时间】:2011-07-10 04:03:13
【问题描述】:

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

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

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

我该怎么做?

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

U2 已导航到 INSERT items 表单。

U1,U3 在视图项 Form 上。

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

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

【问题讨论】:

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


    【解决方案1】:

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

    通常的做法是实现按需刷新功能(通常是 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 秒。并允许每台电脑设置自己的等待时间(大boss 5秒,小boss 30秒)。

    7. 当老板们抱怨网络速度慢时,当没有人坐在电脑前阅读窗口时,向他们展示正在充斥网络的数据包,并建议他们关闭自动刷新。手动刷新仍然可供实际坐在窗前且手指未折断的任何人使用。

    【讨论】:

    • 其实对某些领域来说一点也不荒谬。工厂控制、金融交易应用程序一直都在这样做。这真的取决于是否需要。
    • @TomTom。我的大多数客户是银行和金融机构。事实上,这些应用程序根本不做,如果他们做了,他们会淹没网络。它们依赖于用户按 F5。具有恒定显示屏幕的交易应用程序有点不同,我已经详细说明了它们(至少是好的应用程序)使用的方法,以确保它们不会用不变的数据淹没网络。无论如何,OP的要求不是工厂控制或贸易;我的观点是,如果不考虑负载,这是荒谬的。我并没有说所有这样的例子都是荒谬的。
    • 先生,我的应用程序只是一个简单的应用程序。让我们考虑一台安装了 sql 的 PC,并且用户使用 .net winform 应用程序输入数据。一旦他输入,我想立即向他展示新的输入。为此我应该使用什么,请帮我写代码
    • @sqlchild。在我的回答中做出了回应。
    【解决方案2】:

    您可以通过运行一个单独的线程来做到这一点,该线程将在一定时间跨度后继续更新数据。

    【讨论】:

      【解决方案3】:

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

      更多详情请查看Service Broker team的博客

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-12-06
        • 1970-01-01
        • 2021-11-19
        • 1970-01-01
        • 2019-01-31
        相关资源
        最近更新 更多