Asp.Net 执行定时任务

Asp.Net 执行定时任务,我们要在Global.asax.cs中添加如下代码

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.SessionState;

namespace SurveyOnline
{
    public class Global : System.Web.HttpApplication
    {

        void Application_Start(object sender, EventArgs e)
        {
            // 在应用程序启动时运行的代码

	    System.Timers.Timer myTimer = new System.Timers.Timer();
	    //OnTimedEvent任务
            myTimer.Elapsed += new System.Timers.ElapsedEventHandler(OnTimedEvent);
	    //间隔1秒
            myTimer.Interval = 1000;
            myTimer.Enabled = true;

        }

        void Application_End(object sender, EventArgs e)
        {
            //  在应用程序关闭时运行的代码

        }

        void Application_Error(object sender, EventArgs e)
        {
            // 在出现未处理的错误时运行的代码

        }

        void Session_Start(object sender, EventArgs e)
        {
            // 在新会话启动时运行的代码

        }

        void Session_End(object sender, EventArgs e)
        {
            // 在会话结束时运行的代码。 
            // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
            // InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer 
            // 或 SQLServer,则不会引发该事件。

        }

	 #region 定时任务

        /// <summary>
        /// 定时任务处理
        /// </summary>
        /// <param name="source"></param>
        /// <param name="e"></param>
        private static void OnTimedEvent(object source, System.Timers.ElapsedEventArgs e)
        {


            //获得当前时间单位
            int eyear = e.SignalTime.Year;
            int emonth = e.SignalTime.Month;
            int eday = e.SignalTime.Day;
            int ehour = e.SignalTime.Hour;
            int eminute = e.SignalTime.Minute;
            int esecond = e.SignalTime.Second;

            //获取未处理的定时任务列表
            DataTable task = getTimeTag();

            
            for (int i = 0; i < task.Rows.Count; i++)
            {
                //定时任务的时间
                string date_time = task.Rows[i]["dateTime"].ToString();
                //分解时间
                SortedList<string, int> sl = getDateTimeMap(date_time);

                //任务时间单位
                int year = sl["year"];
                int month = sl["month"];
                int day = sl["day"];
                int hour = sl["hour"];
                int minute = sl["minute"];
                int second = sl["second"];


                //处理 当前时间 = 定时任务时间 
                if (eyear == year && emonth == month && eday == day && ehour == hour && eminute == minute && esecond == second)
                {

                    string connectionString = "server=127.0.0.1;database=We7_CMS;uid=sa;pwd=123456";
                    SqlConnection myConnection = new SqlConnection(connectionString);
                    string sql = "update Article set state=1 where ID='" + task.Rows[i]["articleID"].ToString() + "'";

                    string id = task.Rows[i]["id"].ToString();

                    SqlCommand myCommand = new SqlCommand(sql, myConnection);

                    myConnection.Open();
                    myCommand.ExecuteNonQuery();
                    myConnection.Close();

                    updateTaskState(connectionString, id);

                }

            }
        }

        /// <summary>
        /// 修改定时任务表  任务状态 state
        /// </summary>
        /// <param name="connectionString">连接字符串</param>
        /// <param name="id">任务ID</param>
        private static void updateTaskState(string connectionString, string id)
        {
            SqlConnection myConnection = new SqlConnection(connectionString);
            string sql = "update TimerTask set state=1 where id=" + id;
            SqlCommand myCommand = new SqlCommand(sql, myConnection);

            myConnection.Open();
            myCommand.ExecuteNonQuery();
            myConnection.Close();

        }

        /// <summary>
        /// 分解时间日期, 年 月 日 时 分 秒 得到每个单位的值
        /// </summary>
        /// <param name="date_time">字符串日期 例如:2013-06-10 11:36:12</param>
        /// <returns>类似Map的键值集合</returns>
        private static SortedList<string, int> getDateTimeMap(string date_time)
        {

            string[] dts = date_time.Split(' ');
            string date = dts[0];
            string time = dts[1];

            string[] ymd = date.Split('-');

            int year = Convert.ToInt32(ymd[0]);
            int month = Convert.ToInt32(ymd[1]);
            int day = Convert.ToInt32(ymd[2]);

            string[] hms = time.Split(':');

            int hour = Convert.ToInt32(hms[0]);
            int minute = Convert.ToInt32(hms[1]);
            int second = Convert.ToInt32(hms[2]);

            SortedList<string, int> sl = new SortedList<string, int>();

            sl.Add("year", year);
            sl.Add("month", month);
            sl.Add("day", day);
            sl.Add("hour", hour);
            sl.Add("minute", minute);
            sl.Add("second", second);


            return sl;
        }

        /// <summary>
        /// 获得未处理的定时任务 state=0 未处理
        /// </summary>
        /// <returns>未处理的定时任务列表</returns>
        private static DataTable getTimeTag()
        {

            StringBuilder strSql = new StringBuilder();
            strSql.Append("select * ");
            strSql.Append(" FROM TimerTasK where state=0 ");


            return SqlHelper.ExecuteDataTable(CommandType.Text, strSql.ToString(), null);

        }
        #endregion


    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值