C# 如何检测触发器何时触发?
我有一个项目,我必须发送电子邮件给我的客户时,一个产品被购买。我一直在与其他开发人员交谈,我们得出结论,完成该项目有三个主要步骤:C# 如何检测触发器何时触发?,c#,sql-server,winforms,windows-services,service-broker,C#,Sql Server,Winforms,Windows Services,Service Broker,我有一个项目,我必须发送电子邮件给我的客户时,一个产品被购买。我一直在与其他开发人员交谈,我们得出结论,完成该项目有三个主要步骤: 创建一个触发器,该触发器将在数据插入sales表时触发 创建一个Windows服务,以便在触发此触发器时“监视” 用于发送电子邮件的WinForms应用程序 我知道如何通过WinForms应用程序发送电子邮件,所以第3步可以。 我阅读了有关ServiceBroker的信息,并在我的数据库中启用了它。此外,我还创建了触发器,以便在插入或更新数据时通过ServiceBr
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
将ANSI_空值设置为ON
去
在上设置带引号的\u标识符
去
创建触发器SendServiceBroker
论dbo.销售
插入后,更新
作为
开始
不计数;
声明@ch UNIQUEIDENTIFIER
声明@msg NVARCHAR(最大值);
开始对话@ch
来自服务[发起人服务]
服务“目标服务”
合同上[http://ssb.csharp.at/HelloWorldContract]
加密=关闭时;
设置@msg=
加布里埃拉
' ;
发送对话@ch
消息类型[http://ssb.csharp.at/RequestMessage]
(@msg);
结束
去
另外,我在Microsoft的GitHub页面中找到了a的代码。我在电脑上安装了这项服务,然后在销售表中插入了一些数据,但什么也没发生。
我曾想过直接在触发器上发送电子邮件(使用sp\u send\u dbmail
),但我没有这样做的必要权限。
我认为在整个过程中我缺少了一些东西来让它正常工作,但我不知道我必须做些什么才能使它正常工作。每次在创建它的对象上使用它所“绑定”的DML语句时,都会触发一个触发器。在这种情况下,触发器将在表
dbo.Sales
上的每个UPDATE
和INSERT
语句完成后发生。另外,不要在触发器中声明事务。触发器
已经封装在DML语句的事务中。执行开始事务
、提交
和回滚
等操作可能会导致意外行为。处理触发器外部的事务,而不是触发器内部的事务。好的,我从触发器中删除了BEGIN TRANSACTION
和COMMIT TRANSACTION
,并插入了新数据,但我仍然不知道下一步要做什么。我想下一步应该是根据我读到的内容查看RECEIVE tsql命令,我需要使用C#Windows服务中的Service Broker消息处理器来获取收到的消息。。。正确的?