c# - 数据库数据更改时更新用户界面

标签 c#

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

示例:

  1. A 的计算机上有一个仪表板,用于监控高级库存明细。
  2. B、C 和 D 分别向库存数据库添加了新商品。
  3. B、C 和 D 的操作应立即反射(reflect)在 A 的操作上(实时),无需计时器、间隔或手动刷新。

是否可以通过 C# WinForms 实现此目的?我已经研究并尝试过有关 SignalR 的内容,但我认为这不是我想要/需要的。

谢谢。

最佳答案

假设您的数据库是 MSSQL。

我很遗憾地说,如果不通过轮询请求访问 SQL DB,您就无法实现您想要的目标。您可以尝试SQLDependency正如 @Cyber​​ Progs 在评论中提到的,但我仍然认为这不会有多大好处。但是,嘿,尝试并没有坏处:)所以去吧。

SQL 更像是一种你所求即所得。反之则不然。因此,除非您使用计时器或手动刷新向数据库发出轮询请求以获取所需的任何表的详细信息,否则 SQL 本身将不会通过对您的程序进行更新。

由于您已经尝试并离开了 SignalR,我建议使用 Timer + 多线程。除此之外,我没有看到更适合您需要实现的目标的方法。

另外一个更方便的选择是使用驻留在System.IO.FileSystemWatcher中的FileSystemWatcher。 您可以做的是在您想要收到通知的表上创建一个 SQL 触发器

每当 INSERTUPDATEDELETE 时,此触发器最终只会更改(修改)本地/网络文件 查询已运行。

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

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

关于c# - 数据库数据更改时更新用户界面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45272867/

相关文章:

c# - Json空数组在MVC中反序列化为null

C# ShowDialog 父窗体为空

c# - Windows 工作流 StateActivity 切换性能

javascript - 提前输入和 Taginput : Issue with Remote Fetch

c# - 将事件重新提交到 rebus

c# - 如何重命名 Xamarin 绑定(bind)库中的属性

c# - 在 Asp.net Web 服务中集成 JWT

用于 SSH 和 Telnet 的 C# 库

c# - 优化新闻获取

c# - WPF - ObservableCollection 类型转换