首页 > 解决方案 > 如何检测触发器何时触发?

问题描述

我有一个项目,我必须在购买产品时向我的客户发送电子邮件。我一直在与其他开发人员交谈,我们得出的结论是完成这个项目有 3 个主要步骤:

  1. 创建一个触发器,当数据插入到 sales 表时触发;
  2. 当触发此触发器时,创建一个 Windows 服务来“监视”;
  3. 用于发送电子邮件的 WinForms 应用程序。

我知道如何通过 WinForms 应用程序发送电子邮件,所以第 3 步就可以了。我阅读了 Service Broker 并在我的数据库上启用了它。此外,我创建了触发器,以便在插入或更新数据时通过 Service Broker 发送消息。我按照本教程提出了这个触发器:

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

CREATE TRIGGER SendServiceBroker
   ON  dbo.Sales
   AFTER INSERT,UPDATE
AS 
BEGIN
    SET NOCOUNT ON;

    DECLARE @ch UNIQUEIDENTIFIER
    DECLARE @msg NVARCHAR(MAX) ;
    BEGIN DIALOG CONVERSATION @ch
        FROM SERVICE [InitiatorService]
        TO SERVICE 'TargetService'
        ON CONTRACT [http://ssb.csharp.at/HelloWorldContract]
        WITH ENCRYPTION = OFF ;
        SET @msg = '<HelloWorldRequest>
                        Gabriela
                    </HelloWorldRequest>' ;
        SEND ON CONVERSATION @ch 
        MESSAGE TYPE [http://ssb.csharp.at/RequestMessage] 
        (@msg) ;
END
GO

另外,我在 Microsoft 的 GitHub 页面中找到了Windows 服务项目的代码。我在我的计算机中安装了该服务,然后在 Sales 表中插入了一些数据,但没有任何反应。我想过直接在触发器上发送电子邮件(使用sp_send_dbmail),但我没有这样做的必要权限。我认为在整个过程中我缺少一些东西来使其正常工作,但我不知道我必须做什么才能使其正常工作。

标签: c#sql-serverwinformswindows-servicesservice-broker

解决方案


推荐阅读