【问题标题】:Refresh the method after item add or delete from SQL database从 SQL 数据库中添加或删除项目后刷新方法
【发布时间】:2017-07-09 16:09:42
【问题描述】:

如标题所示,我正在使用 C# 和 WPF 开发一个应用程序,该应用程序充当许多计算机上的客户端,并在公司内使用 SQL 处理数据。当一个人从服务器的数据库中添加或删除某些内容时,我希望它刷新使用此应用程序的所有计算机上的项目视图。我知道我可能需要使用 SQL 触发器,但我有点困惑从哪里开始。

就是这种想法:

private void Timer_Tick(object sender, EventArgs e)
    {
        if (trigger1.triggered == true)
          { 
            RefreshView();
            trigger1.triggered == false;
          }
    }

【问题讨论】:

  • trigger1.triggered == false; 这行没有任何意义。您的意思可能是trigger1.triggered = false;,您的代码不起作用吗?
  • 哦,这只是一个例子。我真的不知道如何处理触发器
  • 所有客户端都直接连接到数据库吗?或者他们连接到连接到数据库的应用程序?
  • @T.Aoukar 我认为当他说I am developing an application using C# and WPF which acts as a client on many computers and handling a data using SQL this 时,OP 的意思很明显。
  • 我使用代码中的查询直接与 SQL 数据库通信

标签: c# sql-server wpf triggers


【解决方案1】:

这不是你想要的触发器。我是Query Notification

【讨论】:

    【解决方案2】:

    SQL 触发器会在数据库中发生某些事情时发生,并允许您在没有外键的情况下删除表中的相关行以保持数据完整性。我认为它们在这里不会有任何好处,因为它们的目的是在数据库内而不是在外部做事。

    您的请求和您建议的处理方式的问题在于它可能会导致大量网络流量。如果您对此没有问题,一种方法是使用时间戳。当记录发生变化时,将新的时间戳保存在数据库中。

    现在,在每台机器上的计时器中,检查自上次检查以来时间戳是否发生了变化。如果有,请重新加载数据。如果没有,请继续运行。

    不过,这个提议有很多事情需要考虑。例如,如果您屏幕上的数据已更改但在其他人更改时没有保存怎么办?你会丢失你的改变吗?您是否列出了更改并询问该怎么做?您是否真的有权进行这些更改,还是需要管理员批准?

    使用乐观锁定(最后写入的记录是正确的)在保存时检查冲突而不是轮询更改会更正常。这样会减少网络流量,但您会被告知自从您加载记录后记录是否已更改,并提供有关如何继续的可用选项。

    在记录列表的情况下,避免巨大网络流量的简单方法是一个简单的刷新按钮来重新加载列表。

    这篇文章可能会给你一些关于在多用户环境中确保数据完整性的想法:https://www.codeproject.com/Articles/1178358/What-You-See-Is-What-You-Update

    我希望这能给你一些思考。

    【讨论】:

      【解决方案3】:

      我想要做的是避免在刷新时调用该方法,因为正如#oldcoder 所说,网络流量将不必要地大。只是想从 pc1 -> DB -> 将有关插入的信息发送到 pc2、pc3 之类的东西。如果这不可能或太复杂,我将每 10 秒左右刷新一次函数。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-08-09
        • 1970-01-01
        • 2015-10-18
        • 2021-10-03
        相关资源
        最近更新 更多