【问题标题】:Get notified when a cell value is changed in SQL Server database [duplicate]在 SQL Server 数据库中更改单元格值时收到通知 [重复]
【发布时间】:2017-03-09 16:23:43
【问题描述】:

我想在数据库表发生特定更改时得到通知。考虑这种情况:我想在一行中的列将其值更改为 5 时执行某个操作。我该如何实现它。我正在使用 C# 和实体框架来访问数据库。

【问题讨论】:

  • 你做过研究吗?有什么漂亮的代码要显示吗?这将帮助我们帮助您。祝你好运!
  • 我对触发器略知一二。但是触发器需要像存储过程一样在数据库中创建,并且我想在值更改时得到通知(任何方式知道发生了所需的更改),我认为这对于触发器是不可能的。欢迎提供更多建议。
  • @MadhurMaurya:告诉我们您的应用程序是什么。 Web/桌面、客户端-服务器/3(n) 层、内网/互联网?
  • @Dennis Web 服务更改了数据库表中的值。我有单元测试框架。我想验证此更改操作。由于该值仅设置为小持续时间,例如 1 秒,因此我希望在列/单元格设置为所需值时得到通知。
  • @MadhurMaurya:如果您只想检查测试框架中的修改数据,请在运行测试之前查询它们,运行测试,然后再次重新查询数据,并比较数据。老实说,我不明白,为什么这个问题要求一些通知。事实上,这是根据 Jim 的回答进行轮询,但您甚至不需要定期轮询服务器 - 只需在测试之前和之后。

标签: c# sql-server entity-framework triggers


【解决方案1】:

简短的回答是,您可能应该尝试在 SQL Server 之外管理它。我必须假设您在作为更新源的 SQL Server 之外执行了一些应用程序逻辑。理想情况下,您的通知逻辑应该在数据库更新之前或之后放置在您的应用程序层中。

如果您无法做到这一点,我可以提供的其他三个选项是:

  • polling 您构建了一个服务,该服务在循环中从 SQL Server 读取值。循环应定期读取该值,并执行通知。大多数工程师避免轮询,因为从最佳实践的角度来看,这通常是相反的,因为它会向数据库添加持久负载。尽管应该避免轮询,但它在该领域非常普遍。

  • msmq 通过存储过程更新值,当值为5 时,使用this article 向MSMQ 发送消息。您将需要编写一个服务来使用 MSMQ 消息并处理通知。您可以通过MSMQ transport 使用 WCF 服务来简化此操作。

  • email 在更新存储过程中使用sp_send_dbmail 发送电子邮件,并构建必要的通知使用者。应该注意的是,如果您以电子方式使用电子邮件,此方法可能还涉及轮询。您可以通过使用IMAP IDLE 处理电子邮件通知来避免这种情况。试试MailKit

报告服务显然也提供通知,但我不熟悉它们。

【讨论】:

    【解决方案2】:
    using(var context = new FooEntities)
    {
        try
        {
        var customer = context.Customers.First(i=> i.CustomerID = 23);
        customer.Name = "Bar";
        context.SaveChanges();
        //Write your notification code here
        }
        catch(Exception ex)
        {
            //Write notification along with the error you want to display.
        }
    }
    

    在 google 中搜索有许多不同的显示通知方式。

    【讨论】:

    【解决方案3】:

    为此,您必须制定一个计划作业,该作业将连续(例如每隔 5 分钟)ping 数据库并像 Facebook 的通知栏一样通知您。

    您还可以在该表上编写触发器,该触发器将插入/更新通知表,然后您将收到通知。

    【讨论】:

    • “就像 Facebook 的通知栏一样” - 我怀疑它使用服务器轮询。很可能,它是基于 Web 套接字的应用程序。
    • @saddam_msp 谢谢萨达姆。如果我不想使用单独的表来跟踪更改怎么办。
    • @Dennis 我刚刚告诉过你会收到通知。 Madhur 跟踪您有多个选项,如上所述,您可以在通过 ftp 等上传数据时在特定位置写入日志文件的用户表。
    猜你喜欢
    • 2014-04-10
    • 2017-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-01
    • 1970-01-01
    相关资源
    最近更新 更多