在WPF应用程序中实时查看数据库记录

时间:2012-05-20 19:36:42

标签: wpf linq events ms-access dataset

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

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

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

想想我正在尝试做什么来查看数据库表的实时编辑,但在应用程序内..任何帮助都非常感谢,如果您需要任何澄清,请告诉我 - 我只需要一个大方向和我很乐意研究更多。

我的解决方案想法:

  • 为ms访问权限更改创建审核表
  • 在用户应用程序中创建单独的工作线程以进行查询 审计表每60秒更改一次
  • 如果发现更改,则会修改受影响的数据集记录
  • 提升数据集记录更新事件以刷新任何受影响的事件 对象/属性

2 个答案:

答案 0 :(得分:1)

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

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

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

  • 如果您使用的是旧版本的Access,则必须自己实施审核。 data macro triggers。一点点搜索也会带来Allen Browne has a good article on that

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

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

我会建议你:

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

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

答案 1 :(得分:0)

如果您使用的是SQL Server

在SQL 2005之前,您可以使用Notification Services

自SQL Server 2008 R2起,它已被StreamInsight

取代

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

Oracle

Handle changes in a middle tier and signal the client

或民意调查。这需要您配置间隔,以便您不会错过更改太久。

一般

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