2012-02-06 62 views
0

那麼當sql數據庫已更新時,我的Windows服務必須發送自動電子郵件。當我的SQL數據庫更新時創建一個Windows服務來發送自動電子郵件

究竟我該怎麼做呢?任何代碼或教程,將真正幫助我

+0

爲什麼選擇windows服務?爲什麼不用DDL或DML觸發器? – 2012-02-06 07:39:56

+0

你是什麼意思「更新」?當一行更新時?插入了一個新行?要不然? – papaiatis 2012-02-06 07:42:22

+0

**什麼**數據庫系統,以及哪個版本? ** SQL **只是結構化查詢語言(Structured Query Language) - 許多數據庫系統使用的語言 - SQL是** NOT **數據庫產品......類似這樣的東西通常是供應商特定的 - 所以我們真的需要知道什麼您正在使用的數據庫系統.... – 2012-02-06 07:44:25

回答

3

解決方案1 ​​ - 使用sp_send_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 = '[email protected]', 
     @body = 'Don''t forget to print a report for the sales force.', 
     @subject = 'Reminder'; 
GO 

來源:http://msdn.microsoft.com/en-us/library/ms189799.aspx

sp_send_dbmail是在SQL Server 2005引入了更多信息:http://msdn.microsoft.com/en-us/library/ms190307.aspx

注:

使用前,數據庫郵件必須使用數據庫郵件 配置嚮導,在SQL Server外圍應用配置工具, 或sp_configure的啓用。

解決方案2 - 使用xp_cmdshell的

如果不能建立數據庫郵件你有另一種選擇:xp_cmdshell。 有了它,您可以在SQL語句中運行命令行命令,例如一個小郵件發送工具。

這個人是一個小例子如何發送使用System.Net.Mail電子郵件在C#應用程序:http://weblogs.asp.net/scottgu/archive/2005/12/10/432854.aspx

如何使用xp_cmdshellhttp://msdn.microsoft.com/en-us/library/aa260689%28v=sql.80%29.aspx

所以你創建一個發送電子郵件一小C#控制檯應用程序,然後你執行它與您的SQL語句中的xp_cmdshell正好相反。

解決方案3 - 使用Windows服務(他想)

Windows服務本身並不能確定是否行獲取的MSSQL數據庫更新。您需要記錄更改。爲此,您可以創建一個特定表的觸發器來記錄更改。通過記錄改變我的意思是插入新行到log表withing觸發這樣的:

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控制檯應用程序一樣簡單。

然後,您的服務將像每分鐘一樣讀取「日誌」表,並在其中存在任何行時發送電子郵件(並且當然會刪除它們)。

可以確定發生了哪種更改:INSERT,UPDATE或DELETE。有關更多詳細信息,請參閱此網站上的評論:http://msdn.microsoft.com/en-us/library/ms189799.aspx

相關問題