【问题标题】:.NET Event handler on a database object数据库对象上的 .NET 事件处理程序
【发布时间】:2012-04-30 05:51:25
【问题描述】:

我想减少我的应用程序解决方案(许多应用程序、1 个数据库、一些第 3 方)中的轮询,客户想要最新的 GUI 状态正在发生的事情。是否可以通过 .NET 代码将事件处理程序添加到使用 SQL Server 技术的表或数据库中?

以下是我遇到的一些解决方案:

  • 具有外部激活功能的 SQL Server Service Broker - 仅启动新应用程序,而不是真正的“事件处理程序”类型的场景
  • CLR 存储过程 - 功能有限,显然在获取 GUI 状态屏幕的事件时会遇到同样的问题
  • 去自定义 - 我可以做一些疯狂的事情,比如让 SQL Server 在一个文件夹中创建一个文件(使用 XP 命令 shell),当一个合格的事件发生时,然后让一个 FileSystemWatcher 对象获取文件更改事件并以这种方式触发它,但不知何故闻起来很糟糕。

【问题讨论】:

  • 几天前我正在考虑这个问题,就我而言,我需要能够在 db 对象的定义发生更改时进行通知。我想知道是否可以在表或视图上添加缓存依赖项,并使用它来跟踪事情何时发生变化。可能值得研究。或者它最终也可能闻起来很臭。 msdn.microsoft.com/en-us/library/…
  • 为什么你不能在 sys.objects 中查询最近 x 中被修改的任何东西?
  • 因为那是轮询。如果我每隔一秒检查一次数据库,看看是否发生了变化以获得预期的效果,那么这对服务器来说是很多额外的工作。当您正在观察的事情发生时,让某些事情通知您会更有效率。推/拉。
  • 抱歉,我的意思是 SqlDependency (msdn.microsoft.com/en-us/library/…)。谢谢@ChrisShain ;-) 我正在等待他的回复,然后再开始为我的目的进行调查。

标签: .net sql-server


【解决方案1】:

您可能想查看SqlDependency。唯一需要注意的是,正如文档所述,

SqlDependency 设计用于 ASP.NET 或中间层 服务器数量相对较少的服务 对数据库活动的依赖项。它不是为使用而设计的 在客户端应用程序中,数百或数千个客户端 计算机将为单个设置 SqlDependency 对象 数据库服务器。如果您正在开发需要的应用程序 数据更改时可靠的亚秒级通知,查看 部分规划有效的查询通知策略和 通知计划中查询通知的替代方法 SQL Server 联机丛书中的主题。

虽然我发现上面的陈述对于大多数 SQL Server 客户端应用程序都是正确的,但希望这应该不是问题。

【讨论】:

  • 否 :-) 虽然 sql 缓存依赖和 sqldependency 并不是完全一样的东西。
  • 该死的你是对的。我想我的意思是 SqlDependency。你认为这对@Jrud 和我来说是一种明智的做法吗?而且我注意到 MSDN 文档仅指 2008 - 最新的数据库版本是否有更新的机制?
  • 它适用于 SQL 2008 R2(请参阅 msdn.microsoft.com/en-us/library/ms175110(v=sql.105).aspx),虽然 2012 年的文档不完整,但我相信它也适用于此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-08-12
  • 2010-12-06
  • 2016-09-23
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多