C# 更改数据库数据时更新用户界面
有没有可能在表单上的控件(例如:datagrid)在数据插入数据库后自动更新 例子:C# 更改数据库数据时更新用户界面,c#,C#,有没有可能在表单上的控件(例如:datagrid)在数据插入数据库后自动更新 例子: 一个人的电脑上有一个仪表盘,用来监控高水平的库存明细 人员B、C和D分别向库存数据库添加了一个新项目 人员B、C和D的操作应立即反映在人员A(实时)上,无需计时器、间隔或手动刷新 是否可以通过C#WinForms实现这一点?我已经研究并尝试了一些关于信号员的事情,但我认为这不是我想要/需要的 谢谢。假设您的数据库是MSSQL 我很抱歉地说,如果不通过轮询请求来访问SQL DB,就无法实现您想要的。你可以像@Cy
谢谢。假设您的数据库是MSSQL 我很抱歉地说,如果不通过轮询请求来访问SQL DB,就无法实现您想要的。你可以像@Cyber Progs在评论中提到的那样尝试,但我仍然认为这不会有多大好处。但是,嘿,尝试没有坏处:)所以去尝试吧 SQL更像是一种你能得到你想要的东西的方式。而不是相反。因此,除非并且直到您通过使用
计时器
或手动刷新
向DB发出轮询请求以获取所需任何表的详细信息,否则SQL本身不会将更新传递给您的程序
由于您已经尝试并离开了信号器
,我建议使用计时器
+多线程
。除此之外,我认为没有一种方法更适合你所需要达到的目标
另外一个更方便的选择是使用FileSystemWatcher
,它位于System.IO.FileSystemWatcher
中。
您可以做的是在您想要得到通知的表上创建一个SQL触发器
每当运行插入
,更新
,删除
查询时,此触发器最终只会更改(修改)本地/网络文件
文件本身的内容中没有任何内容,只是每次运行触发器时,文件的修改日期都会改变
现在,您可以使用FileSystemWatcher
在应用程序中编写代码,以监视此(本地/网络)文件。如果修改了,只需快速轮询数据库并获取最新数据。我建议使用SignalR和SQL事件侦听器
步骤1:
您可以用c#定义实体模型(有一些工具可以进行反向工程,这可以节省您自己编写上下文的时间)
步骤2:
配置信号集线器。在一个对象中存储所有用户连接,有一个基本的教程如何做到这一点
步骤3:
然后,您可以覆盖savechangessync方法,在内部执行一些检查以确定发生了什么变化,如果您感兴趣的是该模型,那么您可以触发对signarhub方法的更改,并将所有更改推送到客户端JS
一旦您在JS中收到它,就可以对datagrid执行更改。看看这个,您是否尝试过SqlDependency