2009-07-08 57 views
4

我有一个表单,显示来自数据库的信息。每当数据库发生变化时,我都希望实时更新列表(或几乎实时)。这是三个方面,我能想到的做到这一点:如何在每次SQL Server表更改时更新Windows窗体客户端?

  • 设置一个计时器在客户端上,检查每隔几秒钟:我知道现在该怎么做,但它会涉及到制作和关闭一个新的连接到数据库一个小时数百次,不管是否有任何变化
  • 构建某种类似TCP/IP聊天服务器,并且每次程序更新数据库时,它也会向TCP/IP发送消息服务器,它反过来会向客户端发送一条消息:我不知道如何执行此操作
  • 创建一个Web服务,该服务返回上次更改表的日期和时间以及客户端w ^乌尔德比较那个时候最后一次更新的客户端:我能想出如何建立一个Web服务,但我不如何做到这一点,而无需对数据库的连接反正

第二个选项没有按看起来它会非常可靠,而第一个似乎会消耗更多的资源。每当数据库发生变化而没有每隔几秒钟建立一次连接时,是否有一些方法可以告诉客户端,或者是否与数据库进行多次连接并不是什么大事?

+0

你正在使用基于Intranet或Internet的Winforms应用程序吗?基于环境,某些解决方案更适合自己。 – 2009-07-08 17:06:29

+0

这将是一个互联网应用程序 – 2009-07-08 17:09:34

回答

1

尝试SqlDependency class。只要SqlCommand的结果发生变化,它就会触发OnChange事件。

编辑

注意,如果有大量的程序运行的副本,它可以生成过多的服务器负载。如果你的应用程序将公开可用,它可能不是一个好主意。

另请注意,它可以在不同线程上触发事件,因此您需要使用Control.BeginInvoke来更新您的用户界面。

1

您可以使用SQL Server中的事件通知在.Net中引发事件,让您知道数据已更改。见下面链接的文章。

埃里克

SQL Server Event Notification