`
haimingyoung
  • 浏览: 39344 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Asp.Net 执行定时任务

    博客分类:
  • .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


    }
}

 

分享到:
评论

相关推荐

    ASP.NET使用Quartz.NET实现定时任务调度

    quartz.net+TopShelf

    asp.net定时任务(定时器)

    asp.net定时任务,只要运行页面或者发布到iis(启动iis)之后每隔10秒执行一次

    Asp.net(C#) 创建windows服务并定时执行

    Asp.net(C#) 创建windows服务并定时执行某个接口,webservices等

    asp.net自动执行任务-解决应用池回收问题

    在复杂的业务应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件,定期处理用户状态信息,支付系统中定期同步异常账单等等,我们称之...

    asp.net 每天定点执行任务

    下面是每天零点执行一个存储过程

    ASP.NET4高级程序设计第4版 带目录PDF 分卷压缩包 part1

    1.1.2 要点2:ASP.NET是编译执行的,而不是解释执行的 1.1.3 要点3:ASP.NET支持多语言 1.1.4 要点4:ASP.NET运行在公共语言运行库内 1.1.5 要点5:ASP.NET是面向对象的 1.1.6 要点6:ASP.NET支持所有的...

    asp.net知识库

    深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述的补白 asp.net 运行机制初探(httpModule加载) 利用反射来查看对象中的私有变量 关于反射中创建类型实例的两种方法 ASP.Net应用程序的多进程模型 NET委托...

    .Net Core中使用Quartz.Net实践记录

    Quartz.NET是一个强大、开源、轻量的作业调度框架,是 OpenSymphony 的 Quartz API 的.NET移植,用C#改写,可用于winform和asp.net应用中。它灵活而不复杂。你能够用它来为执行一个作业而创建简单的或复杂的作业调度...

    asp.net 定时器Quartz

    开发中,经常遇到需要定时执行某个任务的需要。可以用数据库的计划任务完成,也可以用代码完成。.net环境下的Quartz就是非常好的解决方案。Quartz有自己的语言,类似正则也有表达的方式,还是需要学习一下的。

    ASP.NET4高级程序设计(第4版) 3/3

    1.1.2 要点2:ASP.NET是编译执行的,而不是解释执行的 3 1.1.3 要点3:ASP.NET支持多语言 4 1.1.4 要点4:ASP.NET运行在公共语言运行库内 6 1.1.5 要点5:ASP.NET是面向对象的 7 1.1.6 要点6:ASP.NET支持...

    ASP.NET如何定时调用WebService服务

    在ASP.NET程序中,可以通过Time组件实现定时器功能,但是它与数据库中的任务计划不一样,它必须基于程序正在运行中才可生效,而数据库任务计划是不需要基于ASP.NET程序运行而执行任务。

    asp.net 定时间点执行任务的简易解决办法

    里的定时间点执行任务,指的是每天的某个时间执行一项任务。

    C#计划任务代码定时执行任务SheduleTaskHelper.zip

    asp.net项目中所用到的计划任务代码,可以定时执行任务 1.在asp.net 项目中添加App.cs这个类 public class App { public static int Counter { get; set; } public static void Init() { var random = new ...

    Asp.Net(C#)自动执行计划任务的程序实例分析分享

    在业务复杂的应用程序中,有时候会要求一个或者多个任务在一定的时间或者一定的时间间隔内计划进行,比如定时备份或同步数据库,定时发送电子邮件等,我们称之为计划任务。实现计划任务的方法也有很多,可以采用SQL...

    ASP.NET权限管理系统源码

    定时任务:在线(添加、修改、删除)任务调度,包含执行结果日志 系统Api:Api文档与测试工具 数据表管理:查看当前数据库所有表、字段及记录总数 代码生成:快速生成对单表的增删改查 服务器信息:查看服务器...

    asp.net中System.Timers.Timer的使用方法

    我们经常会在网站中加一些定时执行的任务,比如生成静态页、执行邮件发送等。 可以通过在Global.asax中这样设置来实现。  代码如下: void Application_Start(object sender, EventArgs e) { // 在应用程序启动时...

    即时通讯软件-B/S-asp.net-课设

    本系统的主要任务是提供用户之间实时的交流,方便用户之间相互的沟通。 1.系统登录。登录模块采用基于标准的MVC架构的开发模式。与一般的登录系统相似,主要是对登录用户的身份进行合法性验证。登录状态分为两种:...

    E桶金行业搜索引擎系统(包含多线程客户端蜘蛛系统) V1.6.rar

    E桶金行业搜索引擎系统...蜘蛛程序每执行一阶段采集任务后,自动释放cpu和内存,避免蜘蛛一直执行会挂死。   该程序为ASP.NET2.0版本程序,只要空间支持asp.net2.0即可。 需要确保iis的默认文档中包含default.aspx

Global site tag (gtag.js) - Google Analytics