JOB 创建包含步骤和计划的作业

//引用:

using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo.Agent;
using Microsoft.SqlServer.Management.Smo.Broker;
using Microsoft.SqlServer.Management.Smo.Internal;
using Microsoft.SqlServer.Management.Smo.Mail;
using Microsoft.SqlServer.Management.Smo.SqlEnum;

using System.Data.OleDb;
using System.IO;
using System.Data.SqlClient;

 /// <summary>
    /// 注释:使用SMO需要引用下面的dll文件,文件路径:C:/Program Files/Microsoft SQL Server/100/SDK/Assemblies/
    /// Microsoft.SqlServer.ConnectionInfo.dll
    /// Microsoft.SqlServer.Smo.dll
    /// Microsoft.SqlServer.Management.Sdk.Sfc.dll
    /// Microsoft.SqlServer.SqlEnum.dll
    /// </summary>

 

 

#region 创建包含步骤和计划的作业
        /// <summary>
        ///  创建包含步骤和计划的作业
        /// </summary>
        /// <param name="databaseName">数据库名</param>
        /// <param name="jobName">作业名称</param>
        /// <param name="description">作业说明</param>
        /// <param name="strSQl">SQL命令</param>
        /// <param name="startDate">开始日期,为null表示当前时间</param>
        /// <param name="endDate">截止日期,为null表示无截止日期</param>
        /// <param name="FrequencyType">计划频率,每天、每周、每月、只运行一次</param>
        public Guid Create(string databaseName, string jobName, string description, string strSQl,
                           DateTime startDate, DateTime endDate, FrequencyTypes FrequencyType)
        {
            #region 创建作业

            ServerConnection conn = new ServerConnection("dev-db", "sa", "sqlserver");
            Server myServer = new Server(conn);

            //调用删除job方法,传入job名称
            DeleteJob(jobName);
            Job jb = new Job(myServer.JobServer, jobName);
            jb.Description = description;
            jb.Create();
            #endregion 创建作业

            #region 作业步骤
            JobStep jbstp = new JobStep(jb, "作业步骤");

            //数据库
            jbstp.DatabaseName = databaseName;

            //计划执行的SQL命令  
            jbstp.Command = strSQl;

            //成功时执行的操作
            jbstp.OnSuccessAction = StepCompletionAction.QuitWithSuccess;

            //失败时执行的操作
            jbstp.OnFailAction = StepCompletionAction.QuitWithFailure;

            //创建 SQL 代理实例的作业步骤.
            jbstp.Create();
            #endregion 作业步骤

            #region 作业计划属性

            JobSchedule jbsch = new JobSchedule(jb, "作业计划");

            //计划频率,每几天一次
            //每天一次,指定时间运行
            //--Daily    [每天]
            //--Weekly   [每周]
            //--Monthly   [每月]
            //--Run Once  [只运行一次]           
            //jbsch.FrequencyTypes = FrequencyTypes.Daily;
            jbsch.FrequencyTypes = FrequencyType;
            jbsch.FrequencyInterval = 1;
            jbsch.FrequencySubDayTypes = FrequencySubDayTypes.Once;
            jbsch.ActiveStartTimeOfDay = new TimeSpan(12, 37, 0);
            //每天多次,每隔指定时间一次
            //jbsch.FrequencySubDayTypes = FrequencySubDayTypes.Hour;
            //jbsch.FrequencySubDayInterval = 1;                
            //jbsch.ActiveStartTimeOfDay = new TimeSpan(0, 0, 0);              
            //jbsch.ActiveEndTimeOfDay = new TimeSpan(23, 59, 59);

            //持续时间               
            if (startDate != null)
            {  //开始时间  
                jbsch.ActiveStartDate = startDate;
            }
            else
            {
                jbsch.ActiveStartDate = DateTime.Now;
            }
            if (endDate != null)
            {
                //结束时间,null表示无结束日期
                jbsch.ActiveEndDate = endDate;
            }

            //创建SQL代理实例的作业调度
            jbsch.Create();

            //创建成功后立刻执行一次开始
            jb.ApplyToTargetServer(myServer.JobServer.Name);
            jb.Start();

            //创建成功后立刻执行一次结束
            #endregion 作业计划属性

            //返回作业GUID
            return jb.JobID;
        }
        #endregion

        #region 删除job
        /// <summary>
        /// 删除job
        /// </summary>
        /// <param name="jobName">job名称</param>
        /// <returns></returns>
        public int DeleteJob(string jobName)
        {
            //记录返回值
            int count = 0;
            try
            {
                //获取Web.config数据库连接
                string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                SqlConnection con = new SqlConnection(ConnectionString);
                //打开
                con.Open();
                string strSQL = "EXEC msdb.dbo.sp_delete_job @job_name=" + jobName;
                SqlCommand cmd = new SqlCommand(strSQL, con);
                //执行命令
                count = cmd.ExecuteNonQuery();
                //关闭
                con.Close();
            }
            catch (Exception)
            {
                return count;
                throw;
            }
            return count;
        }
        #endregion

 

///

  #region 启动Agent服务
        /// <summary>
        /// 启动Agent服务,返回一个 int值,如果大于0成功,否则失败
        /// </summary>
        /// <returns></returns>
        public int StartServices()
        {
            int count = 0;
            try
            {
                //获取Web.config数据库连接
                string ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
                SqlConnection con = new SqlConnection(ConnectionString);
                //打开
                con.Open();
                //启动Agent
                string strSQL = "exec   master..xp_cmdshell 'net start SQLServerAgent '";
                SqlCommand cmd = new SqlCommand(strSQL, con);
                //执行命令
                count = cmd.ExecuteNonQuery();
                //关闭
                con.Close();
            }
            catch (Exception)
            {
                return count;
                throw;
            }
            return count;
        }
        #endregion

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bzhyan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值