一旦在数据库中插入了数据,是否有可能自动更新表单上的控件(例如:datagrid)?
例:
人员A在其计算机上有一个仪表板,用于监视高级库存明细。
人员B,C和D分别向库存数据库添加了新项目。
B,C和D人的动作应立即反映A人(实时),而没有计时器,间隔或手动刷新。
是否可以通过C#WinForms实现呢?我已经研究和尝试了有关SignalR的东西,但我不认为这是我想要/需要的东西。
谢谢。
最佳答案
假设您的数据库是MSSQL。
我很抱歉地说,但是您无法在不通过轮询请求访问SQL DB的情况下实现所需的功能。您可以尝试使用@aaCyber Progs在评论中提到的SQLDependency,但我仍然认为这样做不会有什么好处。但是,嘿,尝试没有害处:)所以就去吧。
SQL可以满足您的要求。并非相反。因此,除非且直到您通过使用timer
或manual refresh
向数据库发出轮询请求以获取所需表的详细信息,否则SQL本身不会将更新传递给程序。
当您尝试离开SignalR
时,我建议使用Timer
+ Multithreading
。除此之外,我没有找到一种更适合您所需要实现的方法。
否则,更方便的选择是使用驻留在FileSystemWatcher
中的System.IO.FileSystemWatcher
。
您可以做的是在要获取通知的表上创建一个SQL Trigger
。
每当运行INSERT
,UPDATE
,DELETE
查询时,此触发器最终将什么也不做,只能更改(修改)本地/网络文件。
该文件本身将没有内容,只是其修改日期会在每次Trigger
运行时更改。
现在,您可以使用FileSystemWatcher
在应用程序中进行编码,以监视此(本地/网络)文件。如果已修改,只需对数据库进行快速轮询并获取最新数据。