C# 创建windows服务以在更新我的sql数据库时发送自动电子邮件

C# 创建windows服务以在更新我的sql数据库时发送自动电子邮件,c#,sql,windows-services,C#,Sql,Windows Services,我的windows服务必须在sql数据库更新后自动发送电子邮件 我该怎么做呢?任何代码或教程都会对我很有帮助解决方案1-使用sp\u send\u dbmail 以下是创建触发器的示例,该触发器在特定表上发生INSERT/UPDATE/DELETE事件时发送电子邮件: USE AdventureWorks2008R2; GO IF OBJECT_ID ('Sales.reminder2','TR') IS NOT NULL DROP TRIGGER Sales.reminder2; GO

我的windows服务必须在sql数据库更新后自动发送电子邮件


我该怎么做呢?任何代码或教程都会对我很有帮助

解决方案1-使用sp\u send\u dbmail

以下是创建触发器的示例,该触发器在特定表上发生INSERT/UPDATE/DELETE事件时发送电子邮件:

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('Sales.reminder2','TR') IS NOT NULL
    DROP TRIGGER Sales.reminder2;
GO
CREATE TRIGGER reminder2
ON Sales.Customer
AFTER INSERT, UPDATE, DELETE 
AS
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'AdventureWorks2008R2 Administrator',
        @recipients = 'danw@Adventure-Works.com',
        @body = 'Don''t forget to print a report for the sales force.',
        @subject = 'Reminder';
GO
资料来源:

sp\u send\u dbmail
是在SQLServer2005中引入的。更多信息:

注:

使用前,必须使用数据库邮件启用数据库邮件 配置向导,SQL Server表面区域配置工具, 或sp_配置

解决方案2-使用xp\u cmdshell

如果无法设置数据库邮件,则可以使用另一个选项:
xp\u cmdshell
。 使用它,您可以在SQL语句中运行命令行命令,例如小型电子邮件发送工具

这是一个如何在C#应用程序中使用
System.Net.Mail
发送电子邮件的小示例:

如何使用
xp\u cmdshell

因此,您可以创建一个发送电子邮件的小型C#控制台应用程序,然后直接从SQL语句中使用
xp#cmdshell
执行它

解决方案3-使用windows服务(如他所愿)

Windows服务无法自行确定MSSQL数据库中的行是否得到更新。您需要记录更改。为此,您可以为特定表创建一个触发器来记录更改。通过记录更改,我的意思是使用触发器将新行插入
log
表,如下所示:

USE MyDatabase;
GO
IF OBJECT_ID ('Products.TRRowUpdated','TR') IS NOT NULL
    DROP TRIGGER Products.TRRowUpdated;
GO
CREATE TRIGGER TRRowUpdated
ON Products
AFTER INSERT, UPDATE, DELETE 
AS
   INSERT INTO log ('Message', 'Date') VALUES ('Products table got modified', GETTIME())
GO
创建Windows服务项目与使用Visual Studio创建控制台应用程序一样简单

然后,您的服务将像每分钟一样读取“日志”表,如果其中有任何行,则发送电子邮件(当然会删除它们)


可以确定发生了什么样的更改:插入、更新或删除。有关更多详细信息,请参阅本网站上的评论:

解决方案1-使用sp\u send\u dbmail

以下是创建触发器的示例,该触发器在特定表上发生INSERT/UPDATE/DELETE事件时发送电子邮件:

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('Sales.reminder2','TR') IS NOT NULL
    DROP TRIGGER Sales.reminder2;
GO
CREATE TRIGGER reminder2
ON Sales.Customer
AFTER INSERT, UPDATE, DELETE 
AS
   EXEC msdb.dbo.sp_send_dbmail
        @profile_name = 'AdventureWorks2008R2 Administrator',
        @recipients = 'danw@Adventure-Works.com',
        @body = 'Don''t forget to print a report for the sales force.',
        @subject = 'Reminder';
GO
资料来源:

sp\u send\u dbmail
是在SQLServer2005中引入的。更多信息:

注:

使用前,必须使用数据库邮件启用数据库邮件 配置向导,SQL Server表面区域配置工具, 或sp_配置

解决方案2-使用xp\u cmdshell

如果无法设置数据库邮件,则可以使用另一个选项:
xp\u cmdshell
。 使用它,您可以在SQL语句中运行命令行命令,例如小型电子邮件发送工具

这是一个如何在C#应用程序中使用
System.Net.Mail
发送电子邮件的小示例:

如何使用
xp\u cmdshell

因此,您可以创建一个发送电子邮件的小型C#控制台应用程序,然后直接从SQL语句中使用
xp#cmdshell
执行它

解决方案3-使用windows服务(如他所愿)

Windows服务无法自行确定MSSQL数据库中的行是否得到更新。您需要记录更改。为此,您可以为特定表创建一个触发器来记录更改。通过记录更改,我的意思是使用触发器将新行插入
log
表,如下所示:

USE MyDatabase;
GO
IF OBJECT_ID ('Products.TRRowUpdated','TR') IS NOT NULL
    DROP TRIGGER Products.TRRowUpdated;
GO
CREATE TRIGGER TRRowUpdated
ON Products
AFTER INSERT, UPDATE, DELETE 
AS
   INSERT INTO log ('Message', 'Date') VALUES ('Products table got modified', GETTIME())
GO
创建Windows服务项目与使用Visual Studio创建控制台应用程序一样简单

然后,您的服务将像每分钟一样读取“日志”表,如果其中有任何行,则发送电子邮件(当然会删除它们)


可以确定发生了什么样的更改:插入、更新或删除。有关详细信息,请参阅此网站上的评论:

为什么选择windows服务?为什么不使用DDL或DML触发器?你说的“更新”是什么意思?当一行被更新时?是否插入新行?还是别的?什么数据库系统,哪个版本??SQL只是结构化查询语言-一种被许多数据库系统使用的语言-SQL不是数据库产品。。。像这样的东西通常是特定于供应商的-所以我们真的需要知道您使用的是什么数据库系统…为什么是windows服务?为什么不使用DDL或DML触发器?你说的“更新”是什么意思?当一行被更新时?是否插入新行?还是别的?什么数据库系统,哪个版本??SQL只是结构化查询语言-一种被许多数据库系统使用的语言-SQL不是数据库产品。。。像这样的东西通常是特定于供应商的-所以我们真的需要知道您使用的是什么数据库系统。。。。