更改数据库数据时更新用户界面

时间:2017-07-24 04:55:31

标签: c#

有什么方法可以在数据插入数据库后自动更新表单上的控件(例如:datagrid)吗?

实施例

  1. 人员A的计算机上有一个仪表板,用于监控高级别的库存故障。
  2. 人员B,C和D分别向库存数据库添加了一个新项目。
  3. B,C和D的动作应立即反映在A人身上(实时),没有定时器,间隔或手动刷新。
  4. 是否可以通过C#WinForms实现这一目标?我已经研究过并尝试过有关SignalR的事情,但我并不认为它是我想要/需要的。

    感谢。

2 个答案:

答案 0 :(得分:2)

假设您的数据库是MSSQL。

我很遗憾地说,但是如果没有使用轮询请求访问SQL DB,就没有办法实现您的目标。您可以在评论中尝试@Cyber​​ Progs所提及的SQLDependency,但我仍然认为这不会有太多好处。但是,嘿,尝试没有害处:)所以去吧。

SQL更像是一种你得到的东西。不是相反。因此,除非您向数据库发出轮询请求以使用timermanual refresh获取所需表的详细信息,否则SQL本身不会将更新传递给您的程序。 / p>

您已尝试离开SignalR,我建议您使用Timer + Multithreading。除此之外,我没有看到更适合你所需要的方式。

另外一个更方便的选择是使用位于FileSystemWatcher的{​​{1}}。 您可以做的是在表格上创建一个System.IO.FileSystemWatcher,您希望收到通知。

每当运行SQL TriggerINSERTUPDATE查询时,此触发器最终不会执行任何操作,只会更改(修改)本地/网络文件

文件本身在其内容中没有任何内容,只是它的修改日期会在每次DELETE次运行时发生变化。

您现在可以使用Trigger在您的应用程序中进行编码,以观察此(本地/网络)文件。如果它被修改,只需对数据库进行快速轮询并获取最新数据。

答案 1 :(得分:1)

我建议使用SignalR和SQL事件监听器。

第1步: 您可以在c#中定义实体模型(有一些工具可以进行逆向工程,这样可以节省您自己编写上下文的时间)。

第2步: 配置SignalR Hub。将所有用户连接存储在对象中,this有一个基本的教程如何做到这一点。

第3步: 然后,您可以覆盖 SaveChangesAsync 方法,在内部进行一些检查以确定是什么样的chanegd以及您感兴趣的模型是否可以触发对SIgnalR hub方法的更改并且将推送所有更改到客户端JS。

在JS中收到它后,您可以对数据网格执行更改。