C#实现定时更新数据库的任务
开发需要实现每天定时更新钉钉考勤的功能,上网搜到了这篇文章,顺便写一些自己的见解
代码
//在构造方法中,调用设置任务的函数。这个可以根据自己的代码选择位置放
public DingAttenceController()
{
setTaskAtFixedTime();
}
//设置定时任务
private void setTaskAtFixedTime()
{
DateTime now = DateTime.Now;
//8.3的解释 8是八个小时,0.3指的是 60*0.3 = 18分钟。在这天的8点18分执行。
DateTime oneOClock = DateTime.Today.AddHours(8.3);
if (now > oneOClock)
{
//时间加一天,明天再次执行
oneOClock = oneOClock.AddDays(1);
}
int msUntilFour = (int)((oneOClock - now).TotalMilliseconds);
var t = new System.Threading.Timer(doAt1AM);
t.Change(msUntilFour, Timeout.Infinite);
}
//要执行的任务
private void doAt1AM(object state)
{
//执行功能...,这里每个人都不一样
DownLoadDingattence();
//再次设定(递归调用)
setTaskAtFixedTime();
}
要注意,如果在定时任务中对数据库进行了增加等操作,要提交事务才可以保证数据库中进行了更改。我有好几次都是insert语句执行了,但是数据库中并没有任何改变。id的值却增加了,后来我经过一天的检查加询问,才发现这个问题。
ts.Complete(); //一句话费一天