【问题标题】:Running a SQL Script through windows service c#通过 Windows 服务 c# 运行 SQL 脚本
【发布时间】:2017-07-28 14:45:13
【问题描述】:

我正在尝试在我的 Windows 服务中安排一个任务,以便每周运行脚本。 我不想通过 sql 作业来做。 有什么想法吗?

【问题讨论】:

    标签: c# sql windows-services taskscheduler


    【解决方案1】:

    您可以为此使用Quartz 调度库。它支持 CRON 触发器。所以你可以定义一个简单的工作,比如:

    public class Sqljob : IJob
    {
        #region Constructors
    
        public Sqljob()
        {       
        }
    
        #endregion
    
        #region IJob members
    
        public void Execute(IJobExecutionContext context)
        {
            // Perform your SQl work here
        }
    
        #endregion
    }
    

    并有一个调度程序来实例化和调度作业以及触发器:

    public class TaskScheduler : ITaskScheduler
    {
        #region Private fields
    
        private readonly IScheduler _scheduler;
    
        #endregion
    
        #region Constructors
    
        public TaskScheduler(IScheduler scheduler)
        {
            _scheduler = scheduler;
        }
    
        #endregion
    
        #region ITaskScheduler members
    
        public string Name
        {
            get { return this.GetType().Name; }
        }
    
        public void Run()
        {
            ScheduleSqlJob();
    
            _scheduler.Start();
        }
    
        public void Stop()
        {
            if (_scheduler != null) _scheduler.Shutdown(true);
        }
    
        #endregion
    
        #region Private methods
    
        private void ScheduleSqlJob()
        {
            var jobDetails = JobBuilder.Create<Sqljob>()
                                       .WithIdentity("Sqljob")
                                       .Build();
            var trigger = TriggerBuilder.Create()
                                        .StartNow()
                                        .WithCronSchedule("// Get your CRON expression here"))
                                        .Build();
            _scheduler.ScheduleJob(jobDetails, trigger);
        }       
    
        #endregion
    }
    

    您的服务可以像这样调用调度程序:

    public partial class MyService : ServiceBase
    {
        #region Fields
    
        private readonly ITaskScheduler _taskScheduler;
    
        #endregion
    
        public MyService(ITaskScheduler taskScheduler)
        {
            InitializeComponent();
            _taskScheduler = taskScheduler;
        }
    
        protected override void OnStart(string[] args)
        {
            _taskScheduler.Run();
        }
    
        protected override void OnStop()
        {
            _taskScheduler.Stop();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-06-04
      • 1970-01-01
      • 2014-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-31
      • 1970-01-01
      相关资源
      最近更新 更多