【问题标题】:Update C# client whenever database is updated每当更新数据库时更新 C# 客户端
【发布时间】:2010-09-22 11:06:56
【问题描述】:

我正在使用带有 C#/Visual Studio 2008 的 MySQL。我需要知道任何方法,以便在一个用户更新数据库时,通知所有通过网络登录的用户,通知发生了更改。 如果我通过我的应用程序登录数据库,当时数据库中最新记录的序列号是 10,然后我有权限的人更新了数据库中的记录,同时我被通知数据库已更新为新记录。 常见的例子是 MSN Messenger 在朋友上线时提醒他... 虽然我真的不想要那个弹出窗口,但警报功能是这样的......

还有一件事要问: 我想要一个功能,比如如果记录的状态没有更新(比如说超过 3 个小时),那么我希望所有用户也能得到关于这个问题的警报。所有记录都需要此功能,而不是专门针对新记录。

【问题讨论】:

    标签: c# mysql winforms ado.net


    【解决方案1】:

    答案很长,但最好的选择是SqlCacheDependency

    您还可以使用一种称为“反向 AJAX”的技术,该技术用于 Google Mail 通知,并在此处讨论:How does incoming mail notification on Gmail works?

    除了这两个之外,您自己的其他选项 AFAIK 是简单的服务器轮询。

    另外,您还没有提到您的客户是什么。

    它是互联网上的公共网站吗?是内网应用还是WPF应用?

    如果它是一个网站,最好是使用我提到的反向 AJAX 技术的客户端回调。

    【讨论】:

    • 它是一个连接到本地数据库服务器的桌面 Windows 应用程序。此外,我正在为 MySQL 使用 ODBC 连接器,因此 MysqlDependency 不存在。为我感到难过,因为这是一个不错的解决方案。客户端是在具有不同帐户的不同机器上运行的相同软件。还要提到什么是 AFAIK
    • @A. Nosal SqlCacheDependency 的 Mysql 替代方案是 MySqlDependency。你可以在这里阅读更多内容devart.com/dotconnect/mysql/docs/…
    • AFAIK = 据我所知。好的,它是一个 Windows 应用程序和 mysql - 不幸的是,这不是我最大的两个优势(我更喜欢 mssql 和 web)。也许这里的其他人可以提供帮助,也可以更新您的问题/标签以指定客户端是 winforms 应用程序。
    • 让一个单独的 win forms 应用程序(连接到同一个数据库)作为 Windows 托盘应用程序运行怎么样? stackoverflow.com/questions/158895/…
    • @RPM1984...这不是资源有效...以及如何从当前应用程序处理该应用程序...我的意思是如果我退出我的主应用程序也应该终止.. .
    【解决方案2】:

    您可能需要在客户端中设计某种投票功能。例如,您可以每分钟发送一个请求,询问数据库“自 [客户端最新更新日期] 以来您是否更新过任何内容?”如果数据库回答true,则让客户端请求完整的更新集。如果没有,你让它再睡一分钟。

    【讨论】:

    • 此外,您可以将此问题附加到对数据库的任何其他查询。
    • @booota:如果有人更新了记录,但没有添加新记录,会发生什么?连续剧没有变化。
    • @snemarch:好点子!这当然可以做到。但是,在这种情况下,当不需要更新时返回的空结果集与删除最后一条记录创建的空结果集不同,这一点非常重要。换句话说,客户端必须在所有可能的情况下能够知道返回值是否表明没有新数据,或者它是否是新数据本身。这可能是开发早期的设计问题,因为您可能不知道要返回什么样的数据,因此不知道什么样的数据可以作为“无数据”通知器。
    • @Tomas:非常好的一点——在我从事的一个小项目中,我们通过返回添加、修改和删除的行来解决这个问题。为此,我们没有从数据库中删除行,而是添加了一个 IsDeleted 标志并将实际删除推迟到计划的清理中。
    【解决方案3】:

    使用 SqlDependency 类是一种更好的方法,可以让您的所有数据驱动得更快、更高效。它只是消除了每次对数据进行更改时不断重新查询数据库检查的需要。

    【讨论】:

    • SqlDependency 不适用于 MySql 数据库
    猜你喜欢
    • 2015-02-28
    • 2018-04-05
    • 2018-09-28
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-24
    相关资源
    最近更新 更多