每次SQL Server表更改时,如何让Windows窗体客户端更新?

gol*_*gle 5 .net c# sql-server

我有一个表单,其中显示了来自数据库的信息.我希望每次数据库中的某些更改时,列表都会实时更新(或几乎是实时更新).这是我能想到的三种方法来实现这一目标:

  • 在客户端设置一个计时器,每隔几秒检查一次:我现在知道如何执行此操作,但它将涉及每小时数百次创建和关闭与数据库的新连接,无论是否有任何更改
  • 构建类似于TCP/IP聊天服务器的东西,每次程序更新数据库时,它也会向TCP/IP服务器发送一条消息,然后TCP/IP服务器会向客户端的表单发送消息:我不知道如何现在这样做
  • 创建一个Web服务,返回上次更改表的日期和时间,客户端将该时间与客户端上次更新的时间进行比较:我可以弄清楚如何构建Web服务,但我不知道无论如何,如何在不连接数据库的情况下执行此操作

第二种选择似乎不太可靠,第一种选择似乎会消耗超过必要的资源.是否有一些方法可以告诉客户端每次数据库发生更改而不是每隔几秒钟建立一次连接,或者与数据库建立多少连接并不是一件大事?

SLa*_*aks 1

尝试一下SqlDependency课程。每当其结果发生更改时,它将触发 OnChange 事件SqlCommand

编辑

请注意,如果运行大量程序副本,可能会产生过多的服务器负载。如果您的应用程序将公开可用,这可能不是一个好主意。

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