[c#]代码库
using Microsoft.SqlServer.Management.Smo.Agent;
using System;
using System.ComponentModel;
using System.IO;
using System.Windows.Forms;
namespace CheckDatabaseJob
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private readonly string emailTemplatePath = Environment.CurrentDirectory + @"\通知邮件.oft";
private BackgroundWorker checkSQLServerStatusWorker = new BackgroundWorker();
private readonly string formOriginalTitle = "每日ERP数据库的SSIS包运行状态检查";
/// <summary>
/// 每日发送邮件的整点
/// </summary>
private readonly int clock = 8;
/// <summary>
/// 连接字符串
/// </summary>
private readonly string connectionString = @"Data Source=(local);Integrated Security=True;";
private string formTitle;
public bool forceStart = false;
private void CheckERPJobStatusComplete(object sender, RunWorkerCompletedEventArgs eventArgs)
{
this.Text = formTitle;
}
/// <summary>
/// 检查ERP数据库的SSIS包的运行状态,并在失败或正在运行时发送邮件给客户
/// </summary>
private void CheckERPJobStatusAndSendEmail(object sender, DoWorkEventArgs eventArgs)
{
try
{
SMO smo = new SMO(connectionString);
smo.JobName = "ERP_ETL";
DateTime dt = smo.ServerJobServerJobLastRunDate;
CompletionResult result = smo.ServerJobServerJobLastRunOutcome;
if (!dt.Date.Equals(DateTime.Today) || result != CompletionResult.Succeeded)
SendNotificationEmail();
if (forceStart)
forceStart = false;
formTitle = formOriginalTitle;
}
catch (Exception ex)
{
formTitle = formOriginalTitle + " - " + ex.Message + " - " + DateTime.Now.ToString("yyyy/M/dd hh:mm:ss");
forceStart = true;
timer2.Interval = 60000;
timer2.Enabled = true;
}
}
/// <summary>
/// 发送通知邮件
/// </summary>
private void SendNotificationEmail()
{
var app = new Microsoft.Office.Interop.Outlook.Application();
var mail = app.CreateItemFromTemplate(emailTemplatePath);
mail.HTMLBody = mail.HTMLBody.ToString().Replace("{0}", DateTime.Today.ToString("yyyy.M.dd"));
mail.Send();
}
private void chkERPJobStatusAndSendEmail_CheckedChanged(object sender, EventArgs e)
{
timer1.Enabled = false;
timer2.Enabled = false;
if (chkERPJobStatusAndSendEmail.Checked)
CheckIfRunWorker();
}
private void CheckIfRunWorker()
{
if (DateTime.Now.Minute == 0)
timer1.Enabled = true;
else
{
timer2.Interval = ((60 - DateTime.Now.Minute) * 60 - DateTime.Now.Second) * 1000;
timer2.Enabled = true;
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (DateTime.Now.Hour == clock)
checkSQLServerStatusWorker.RunWorkerAsync();
}
private void Form1_Load(object sender, EventArgs e)
{
if (!File.Exists(emailTemplatePath))
{
MessageBox.Show(string.Format("发送通知邮件模板({0})不存在, 请检查!", emailTemplatePath));
Application.Exit();
}
else
{
CheckIfRunWorker();
checkSQLServerStatusWorker.DoWork += CheckERPJobStatusAndSendEmail;
checkSQLServerStatusWorker.RunWorkerCompleted += CheckERPJobStatusComplete;
}
}
private void timer2_Tick(object sender, EventArgs e)
{
timer2.Enabled = false;
if (chkERPJobStatusAndSendEmail.Checked && (DateTime.Now.Hour == clock || forceStart))
checkSQLServerStatusWorker.RunWorkerAsync();
if (!forceStart)
timer1.Enabled = chkERPJobStatusAndSendEmail.Checked;
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
if (this.WindowState == FormWindowState.Minimized)
{
this.Show();
this.WindowState = FormWindowState.Normal;
notifyIcon1.Visible = false;
this.ShowInTaskbar = true;
}
}
private void Form1_SizeChanged(object sender, EventArgs e)
{
if (this.WindowState == FormWindowState.Minimized) //判断是否最小化
{
this.ShowInTaskbar = false; //不显示在系统任务栏
notifyIcon1.Visible = true; //托盘图标可见
notifyIcon1.ShowBalloonTip(1000);
}
}
}
}
[源代码打包下载]