2

免责声明:我必须使用 microsoft access 数据库,并且我无法将我的应用程序连接到服务器以订阅任何服务。

我正在使用 VB.net 创建 WPF 应用程序。我正在根据访问数据库中的记录填充列表视图,当应用程序加载并填充数据集时,我会查询一次。然后,我使用 LINQ 数据集根据过滤器等向用户显示数据。

但是.. 访问表在一天中会被多次修改,这意味着如果用户不重新加载应用程序,随着时间的推移,用户将拥有“旧数据”。有没有办法将 access 数据库连接到 VB.net 应用程序,以便在数据库中添加、删除或修改记录时引发事件?我对事件处理程序中所需的任何代码都很好。我只需要找出一种方法来从访问表中触发 vb.net 应用程序事件。

想一想我正在尝试做的事情是查看对数据库表的实时编辑,但在应用程序中.. 非常感谢任何帮助,如果您需要任何澄清,请告诉我 - 我只需要一个总体方向,我很高兴进行更多研究。

我的解决思路:

  • 为 ms 访问更改创建审计表
  • 在用户应用程序中创建单独的工作线程,以每 60 秒查询审计表的更改
  • 如果发现更改,它将修改受影响的数据集记录
  • 在数据集记录更新时引发事件以刷新任何受影响的对象/属性
4

2 回答 2

1

有几种方法可以做你想做的事,但你在你的过程中基本上是正确的。

据我所知,没有直接的方法可以从数据库驱动程序中获取事件来让您知道发生了什么变化,因此轮询是唯一的解决方案。

  • 我的 MS Access 数据库是一个 Access 2010 ACCDB 数据库,并且您正在使用它的 ACE 驱动程序(如果运行应用程序的计算机上没有安装 Access),您可以使用新的数据宏触发器来记录对表的更改在数据库中自动添加到审计表中,该表将根据需要记录新插入的更新、删除等。
    这种方法是最好的,因为这些发生在 ACE 数据库驱动程序级别,因此它们将尽可能高效和透明。

  • 如果您使用的是旧版本的 Access,则必须自己实施审核。Allen Browne 对此有一篇很好的文章。一些搜索也会带来其他解决方案

  • 您也可以在需要监控的表上运行一些查询

在任何情况下,您都需要监控您提到的审计或数据表。
您可以监控比 60 秒更频繁的更改,具体取决于数据库的负载、客户端的数量等,您可以轻松地每隔几秒钟检查一次。

我会建议你:

  • 在您的应用程序运行时保持与数据库的永久连接:打开一个虚拟表进行读取,并且在您关闭应用程序之前不要关闭它。这对任何人都没有性能成本,但它将确保昂贵的锁定文件创建只进行一次,而不是针对您运行的每个查询。这可能具有巨大的性能导入。有关原因的更多信息,请参阅本文

  • 让您的审计表(或您的数据表)易于监控:包括一个时间戳列,用于记录创建和上次修改记录的时间。这使得检查更改非常快速有效:您只需要检查最近的记录修改日期是否与您阅读的最后一个匹配。
    使用 Access 2010,很容易添加触发器来执行此操作。对于旧版本,您需要在表单级别执行此操作。

于 2012-05-21T02:02:33.583 回答
0

如果您使用的是 SQL Server

在 SQL 2005 之前,您可以使用通知服务

自 SQL Server 2008 R2 以来,它已被StreamInsight取代

其他数据库管理系统和替代品

甲骨文

处理中间层的变化并向客户端发出信号

或投票。这需要您配置时间间隔,这样您就不会错过太长时间的更改。

一般来说

当服务器必须能够向客户端发送消息时,它需要保持通道/套接字对客户端开放,当有很多客户端时,这可能会变得非常昂贵。我建议不要使用服务器推送并尝试进行智能轮询。智能轮询意味着尽可能大的间隔,并在服务器上进行适当的缓存,以防止对同一数据多次访问数据库。

于 2012-05-20T19:52:03.543 回答