Создание службы Windows для автоматической отправки электронных писем при обновлении базы данных sql. - PullRequest
0 голосов
/ 06 февраля 2012

Что ж, моя служба Windows должна отправлять автоматические электронные письма, когда база данных sql была обновлена.

Как мне поступить?любой код или учебники действительно помогут мне

1 Ответ

3 голосов
/ 06 февраля 2012

Решение 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 = 'danw@Adventure-Works.com',
        @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

Примечание:

Доuse, База данных Mail должна быть включена с помощью мастера настройки базы данных Mail, инструмента настройки контактной зоны 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_cmdshell: http://msdn.microsoft.com/en-us/library/aa260689%28v=sql.80%29.aspx

Итак, вы создаете небольшое консольное приложение C #, которое отправляет электронную почту, а затем запускаете его с xp_cmdshell прямо из вашего оператора SQL.

Решение 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.

Затем ваша служба будет читать таблицу 'log', как каждую минуту, и отправлять электронные письма, если в ней есть какие-либо строки (и, конечно, удаляет их).

Можно определить, какие измененияпроизошло: ВСТАВИТЬ, ОБНОВИТЬ или УДАЛИТЬ.Смотрите комментарии на этом сайте для более подробной информации: http://msdn.microsoft.com/en-us/library/ms189799.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...