winform与数据库同步更新

      在.net中通常会遇到这样的需求,就是要将数据库中最新的数据同步显示在winform中,总结一下可以实现的几种方法。

     自己也尝试了一段时间,结合网上其他前辈的指点,大致有以下几种方法可以实现(仅个人观点)

     (1)timer轮询

      可以说这是中最普遍、最容易被想到的方法,大致的思路—>在winform中定义一个timer,设置完时间间隔后可以通过start(或是 Enable)启动时间触发器。每隔一段时间去访问一次数据库,查询出最新的数据显示在winform的控件上,这样就OK了。在容易操作的背后却有着很 大的缺陷,频繁且直接和数据库的交互势必会造成数据库端始终占用着大量的资源,如果对于一般配置的电脑,这样操作不太理想,当然,在网上也看到一些公司用 这种方法同步更新数据库。方法可用却不实用。

     (2)sql触发器

        利用sql触发器可以有两种方法实现

        ①触发器中将新插入的数据即inserted查询出来的数据并接成字符串转换成文件流写入到某个文件中(.txt),在winform中用文件监视器监视 文件的变动,从而得到最新的数据显示在控件中。好像不太多的人用这种方式来实现,涉及到创建文件的权限问题,而且,既然已经想到用"消息"的形式将插入的 数据"发送"出去,何必不再多想一步,借助网络编程实现,即下面提到的方法

        ②这种方法很类似于上面的方法,在sql表的触发器中将数据作为消息socket发送出去,winform端listener,有新消息的时候在控件中显 示该新消息,当然这种方法的资源消耗比timer轮询有很大的改善,数据包的丢失和网络断连后重新启动监听需要考虑。

      目前知道的就这几种方法,如果大家还有其他的方法,望不吝赐教。

@scott_zhou
timer轮询我相信不需要介绍的。重点讲讲socket发送消息吧
UdpClient client = new UdpClient(Port);
IPEndPoint iep = new IPEndPoint(IPAddress.Parse("192.168.1.21"), Port);
client.EnableBroadcast = true;
Byte[] sendBytes = Encoding.Default.GetBytes("dukeyongwang");
client.Send(sendBytes, sendBytes.Length, iep);
client.Close();
把上面发送消息的代码编译成DLL,并注册。然后在SQL中调用DLL,完成消息的发送。在SQL2000中要借助存储过程调用DLL,在SQL2005以上的版本中可以直接在触发器中调用DLL。以下是存储过程中的代码
exec @err = sp_OACreate 'udpClient.udpSendMsg',@obj out --引用DLL
exec @err = sp_OAMethod @obj,'sendMessage',@result out,@param--调用方法
exec sp_OADestroy @obj --销毁
最后就是接受消息端了:
udpClient = new UdpClient(Port);
groupEP = new IPEndPoint(IPAddress.Any, Port);//监听端口
byte[] bytes = udpClient.Receive(ref groupEP);
string msg = ASCIIEncoding.Default.GetString(bytes);
这样就足以实现数据库同步更新!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值