SQL Server 数据库更改侦听器 C#
Posted
技术标签:
【中文标题】SQL Server 数据库更改侦听器 C#【英文标题】:SQL Server Database Change Listener C# 【发布时间】:2011-03-22 19:19:23 【问题描述】:我想从 C# 监听 SQL Server 数据库中数据的更改。我希望有某种侦听器可以用来确定我拥有的数据是否过时。尽管这是一个相当常见的场景,但我找不到任何不是简单地轮询数据库的解决方案。
我使用 Linq-To-SQL 来访问数据,因此有一个 DataContext 对象,我希望我可以监听数据更改事件,但我可以好像没找到
我很欣赏这是一个不平凡的障碍(从 C# 方法到 SQL Server DB),我希望这是一个已解决的问题的原因是它是 GUI 的常见要求。如果无法侦听更新,如何让 GUI 中显示的数据保持新鲜(当它由 SQL Server 数据源支持时)。
虽然这不适用于 GUI 工作,但我希望能从那个领域改编一些东西。
有没有办法在 C# 中订阅 SQL Server 数据库更改事件?
【问题讨论】:
【参考方案1】:我以前从未使用过它们,但是您尝试过 SQL Server 事件通知吗? 见这篇文章:Getting Started with SQL Server Event Notifications
【讨论】:
【参考方案2】:您正在寻找SqlDependency
class,它允许您侦听对 SQL 查询结果集的更改。
【讨论】:
【参考方案3】:DataContext 不会为您提供任何类型的 SQL Server 侦听器功能。最好的办法是创建一个轮询应用程序,甚至是一个单独的线程,它会定期轮询数据库以获取更改并公开一个您的主应用程序可以监听的事件。
【讨论】:
【参考方案4】:如果您使用的是 SQL Server 2008,则有一个非常方便的内置变更数据捕获。
http://msdn.microsoft.com/en-us/library/bb522489.aspx
您可以读取 CDC 数据。
【讨论】:
【参考方案5】:我会使用数据库中包含单行的表来对上次更新、插入或删除的事件进行分类,然后在每个重要表上创建触发器以更新此表,然后轮询此表以进行更改。
【讨论】:
这不适用于快速变化的数据库,因为您需要不断监控表,更糟糕的是,无法保证您不会在检查之间跳过更改。以上是关于SQL Server 数据库更改侦听器 C#的主要内容,如果未能解决你的问题,请参考以下文章
跟踪在 C# 应用程序或 SQL Server 中对 SQL Server 进行更改的人员
C# 中的 SQL Server Express 连接字符串错误