将事件从存储过程提升到Windows服务

时间:2009-01-12 16:31:06

标签: c# sql-server clr

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

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

有人有什么想法吗?

由于

4 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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

这使我几乎可以即时捕捉数据变化并妥善处理。

要使用此类,您需要在要查询的数据库上启用查询通知,请参阅:Enabling Query Notifications

找到了如何在Windows应用程序中使用此类的一个很好的示例here