Wpf 当数据库中的数据更改时更新c中的数据绑定数据源

Wpf 当数据库中的数据更改时更新c中的数据绑定数据源,wpf,data-binding,notifications,Wpf,Data Binding,Notifications,我以前也发过类似的帖子,但从那以后我做了一些研究,我想我会再发一次,看看是否有人对我的问题有任何想法 我正在运行一个WPF应用程序,代码是C。我使用的数据库是SQLServer2005 现在,我正在使用ADO.Net绑定到数据库,并从数据库中存储的进程中检索数据。然后将其存储在数据集中,并进一步向下绑定到WPF应用程序中的控件 现在,我绑定到数据库中的数据在不断变化,比如说每隔几秒钟。我想要的是一种机制,当我绑定到数据库中的数据发生变化时,用C自动告诉我,因此从存储过程返回的数据发生了变化 我在

我以前也发过类似的帖子,但从那以后我做了一些研究,我想我会再发一次,看看是否有人对我的问题有任何想法

我正在运行一个WPF应用程序,代码是C。我使用的数据库是SQLServer2005

现在,我正在使用ADO.Net绑定到数据库,并从数据库中存储的进程中检索数据。然后将其存储在数据集中,并进一步向下绑定到WPF应用程序中的控件

现在,我绑定到数据库中的数据在不断变化,比如说每隔几秒钟。我想要的是一种机制,当我绑定到数据库中的数据发生变化时,用C自动告诉我,因此从存储过程返回的数据发生了变化

我在网上找到了NotificationServices和SQLDependency类,但这已经被弃用了。我也看到了CLINQ,但它似乎不能处理数据库通知方面的问题,据我所知,它只适用于c语言中的集合

我的意思是,计划B方法就是在我的C代码中有一个线程,根据存储在返回数据集中每行上的时间戳,每隔几秒钟轮询一次相同的存储过程。如果我当前的时间戳大于返回的时间戳,则检索该数据。这将在这个新线程中反复运行。如果线程中的连接返回了任何数据,则表示数据已更改,因此将该数据存储到我的c集合中,以便它们可以绑定到我的WPF应用程序

很明显,这是我不想做的事情,因为我认为可能有一个更聪明的方法来做这件事,但我似乎什么都找不到

有人对此有什么想法吗

非常感谢
不确定。

SQL CLR触发器如何?每次在数据库中的目标表中发生更新/插入/删除时,都可以运行SQL触发器,而且CLR SQL触发器似乎将此功能扩展到托管代码:


我不是这方面的专家,但希望它能给你一些有用的东西来看看。

对我来说,计划B听起来是个不错的选择-SQL Server没有内置的通知方法允许你这样做,所以你唯一的选择是:

触发器与CLR用户定义函数相结合。问题在于,根据您在用户定义函数中所做的工作,这可能会为任何写入数据库的人增加相当多的开销-这不是实现通知机制的最有效的层。 实现某种通知机制,并确保写入数据库的每个人都使用此通知机制通知其他人数据已更改。 考虑到第二阶段的努力程度,我认为方案B是一个不错的选择

根据轮询的频率和效率,您可能会发现用户的最终效果与选项2一样好,而且轮询的开销可能比您想象的要小。如果您有很多用户,那么您可以使用诸如缓存/公共轮询线程之类的技术来提供帮助