1

是否可以在 Windows 服务中触发操作,或者是否可以从存储过程中引发可以在服务中捕获的事件。

如果您想象一项服务每 5 分钟运行一次,那将执行一些操作。如果数据库中发生了某些事情或执行了存储过程,并且我想在 5 分钟之前触发此操作,该怎么办。

有人有什么想法吗?

谢谢

埃德

4

4 回答 4

2

听起来您根本不应该使用 Windows 服务。我会设置一个 SQL 作业每 5 分钟运行一次,然后设置一个触发器或任何您希望发生的任何事情,以便在必要时手动运行该作业。

编辑:但是,如果服务在数据库之外执行某些操作,您可以使用 xp_cmdshell 运行系统命令(虽然不是最佳选择)。

于 2009-01-12T16:48:22.377 回答
1

您可以在 SQL Server 中创建一个 CLR 过程,该过程以某种方式使用 SOAP、Remoting 或任何媒介与服务进行通信。不过这是通用的。我认为 SQL Server 2005 的查询通知功能在这里会有所帮助。

于 2009-01-12T16:35:03.090 回答
0

如果您执行 raiserror(@ErrorMessage,16,1),只要您使用 16 和 1 的严重性和状态,它就应该在客户端生成异常。

于 2009-01-12T16:36:52.460 回答
0

根据 Mehrdad 的评论,我能够使用 .NET 框架中的 SqlDependancy 类解决问题。

此类允许您注册 SQL 查询并与之连接,当该查询的结果发生更改时,将引发一个事件以指示数据的更改。

这让我几乎可以立即捕捉到数据变化并进行适当的处​​理。

为了使用这个类,您需要在要查询的数据库上启用查询通知,请参阅:启用查询通知

在这里可以找到如何在 Windows 应用程序中使用此类的一个很好的示例。

于 2009-02-17T10:07:35.253 回答