winform与数据库同步更新
很长时间没写了,不知道要写点什么,上篇中提到过会把游戏的寻路算法贴上,后来因为很长一段时间忙着其他的事情,还没来着及整理(最近就把他贴出来)。既然这次的标题是数据库方面的,那就请我们回归正题吧。
在.net中通常会遇到这样的需求,就是要将数据库中最新的数据同步显示在winform中,总结一下可以实现的几种方法。
自己也尝试了一段时间,结合网上其他前辈的指点,大致有以下几种方法可以实现(仅个人观点)
(1)timer轮询
可以说这是中最普遍、最容易被想到的方法,大致的思路—>在winform中定义一个timer,设置完时间间隔后可以通过start(或是Enable)启动时间触发器。每隔一段时间去访问一次数据库,查询出最新的数据显示在winform的控件上,这样就OK了。在容易操作的背后却有着很大的缺陷,频繁且直接和数据库的交互势必会造成数据库端始终占用着大量的资源,如果对于一般配置的电脑,这样操作不太理想,当然,在网上也看到一些公司用这种方法同步更新数据库。方法可用却不实用。
(2)sql触发器
利用sql触发器可以有两种方法实现
①触发器中将新插入的数据即inserted查询出来的数据并接成字符串转换成文件流写入到某个文件中(.txt),在winform中用文件监视器监视文件的变动,从而得到最新的数据显示在控件中。好像不太多的人用这种方式来实现,涉及到创建文件的权限问题,而且,既然已经想到用"消息"的形式将插入的数据"发送"出去,何必不再多想一步,借助网络编程实现,即下面提到的方法
②这种方法很类似于上面的方法,在sql表的触发器中将数据作为消息socket发送出去,winform端listener,有新消息的时候在控件中显示该新消息,当然这种方法的资源消耗比timer轮询有很大的改善,数据包的丢失和网络断连后重新启动监听需要考虑。
目前知道的就这几种方法,如果大家还有其他的方法,望不吝赐教。