【问题标题】:Raise an event from MySQL and handle it from VB.NET (or something similar)?从 MySQL 引发一个事件并从 VB.NET(或类似的东西)处理它?
【发布时间】:2025-12-31 05:55:06
【问题描述】:

我正在使用 MySQL 5.1.39 和 Visual Studio 2008,并使用 MySQL Connector Net 6.1.2 进行连接。

我想做的是,一旦创建了 MySqlConnection 对象,就能够在给定表中特定行中的字段更新时处理“引发的事件”。

我的意思是,当该表中的该值已从任何其他应用程序手动更改或修改时,我希望在我打开的 VB.NET 应用程序中接收一个信号。到目前为止,我通过打开的 VB.NET 应用程序每 X 秒检查一次该表来执行此操作,但我想知道是否可以以更好的方式完成。

非常感谢您的关注和时间。

【问题讨论】:

    标签: mysql visual-studio-2008 events mysql-connector


    【解决方案1】:

    理想情况下,有SIGNAL 构造,您可以使用use to field SQL logic errors,但直到 MySQL 5.5 才可用。如果可能,最好升级到 5.5。

    编辑:在 5.5 之前没有真正好的解决方案。 TRIGGER 用于获取更新,但不适用于将它们发送到数据库之外。但是要小心,因为如果您通过 FOREIGN KEY 操作(例如 CASCADE 或 UPDATE)进行更新,这将不起作用,因为这些操作不会调用 TRIGGER。所以要小心。

    DELIMITER $$
    CREATE TRIGGER my_trigger_name AFTER UPDATE ON my_table_name
    FOR EACH ROW BEGIN
        CALL my_on_update_procedure(NEW.entry_name, NEW.whatever_else)
    END $$
    
    DELIMITER ; 
    

    my_on_update_procedure 的作用取决于您。您的解决方案可能是 5.1.39 的最佳选择(由于可扩展性问题,我不建议锁定),但 5.5 会为您提供 SIGNAL 构造,这正是您想要的(所以升级!)。

    【讨论】:

    • 但是 5.5 还不是 GA 版本(我认为当前是 5.1.42)。无论如何,我一定会看看 SIGNAL 功能。我真的不知道它的存在,似乎它可能是正确的解决方案。非常感谢您提供这些信息,Travis。
    • 我正在使用里程碑 2 版本,它对我来说已经完全稳定(尽管我承认,我的负载并不高),这是一个好兆头。
    【解决方案2】:

    我从未使用过它,但我认为“TRIGGER”可能是您正在寻找的。​​p>

    http://dev.mysql.com/doc/refman/5.1/en/create-trigger.html

    【讨论】:

    • 也许我错了,但我不认为触发器是我正在寻找的有效解决方案。我经常使用触发器,当我的监控行更新时,我可以使用它们对数据库进行操作,是的,但是我无法通过连接器网络向 VB.NET 应用程序发送事件/信号。或者至少我不知道该怎么做。但无论如何,当然要感谢。
    【解决方案3】:

    我的第一个想法是使用数据库触发器来触发某种通知:通过电子邮件、MOM 或其他任何方式发送消息。谷歌搜索并没有出现太多。我发现了一种基于锁通知的方法:linky。可能是一个理智的方法......

    哦,在那篇博文中,他们还讨论了 MySQL UDF,它允许您在触发器触发时执行任意代码。显然有各种语言的库。 * 上还有一个duplicate question。干杯

    【讨论】:

    • 也感谢您提供此信息。我保证我在发布这个问题之前使用了搜索功能,但没有找到任何东西(我的错,我想我搜索得不够好!)。