您的位置:首页 > 数据库

C#定时执行某一个功能一(sqlite导出xml并压缩)

2017-05-14 09:15 435 查看
背景:

1、外网有新的数据,数据库是sqlite;需要经过网闸传到内网的数据库中以方便下一步的操作。

2、内网数据库是postgresql;

3、由于每天过网闸的数据有很多,同时为了区分是哪个部门的,减少数据的丢失,那么就需要把这些数据从sqllite中读到datatable中,然后每一条存放到一个xml文件中。对这些xml文件进行压缩,规范命名,然后传到内网的存储中,内网进行解压,读取xml文件,然后读取到postgresql中。

4、查询外网数据库,每天凌晨四点开始启动,查询内容:前一天24小时内容,以及当天零点到四点的内容;

两种方案:1、windows服务;2、控制台程序+windows定时计划

方案一:windows服务 

(一)vs新建项目-windows服务。具体步骤:http://blog.csdn.net/cai15191466621/article/details/7007604(网上随便搜的一个教程,大家参考一下就ok)

配置文件内容:1、连接sqlite数据库;2、写类型:用户可选择是定时执行还是间隔执行;3、定时执行的小时;4、定时执行的分钟;5、导出的xml文件,新建的压缩包的存储路径;

(二)代码思路:

1、服务在启动时新建一个timer、timer事件中判断用户的类型,如果是定时执行,就去判断当前事件是否与用户指的时间相同,若相同就执行,否则不执行;

2、执行内容

(1)查询内容到datatable中;

(2)若有内容,则先在压缩包存放路径新建一个文件夹,命名:“固定格式”-“时间戳”;

(3)xml需要从当前运行exe相对路径中复制到文件夹中,命名根据某两个字段命名

foreach (DataRow dr in dt.Rows)
{
string Xmlname = dr["orderid"].ToString() + "_" + dr["batchid"].ToString() + ".xml";
string path = Path.Combine(filePath, Xmlname);
File.Copy(oldXml, path);
XmlDocument xmldoc = new XmlDocument();
xmldoc.Load(path);
XmlNode root = xmldoc.DocumentElement;
XmlNode orderid = root.SelectSingleNode("/root/orderid");
orderid.InnerText = dr["orderid"].ToString();
XmlNode batchid = root.SelectSingleNode("/root/batchid");
batchid.InnerText = dr["batchid"].ToString();
XmlNode obsize = root.SelectSingleNode("/root/obsize");
obsize.InnerText = dr["obsize"].ToString();
XmlNode obfinish = root.SelectSingleNode("/root/obfinish");
obfinish.InnerText = dr["obfinish"].ToString();
XmlNode submittime = root.SelectSingleNode("/root/submittime");
submittime.InnerText = dr["submittime"].ToString();
m_log.Info(dr["submittime"]);
XmlNode createtime = root.SelectSingleNode("/root/createtime");
createtime.InnerText = dr["createtime"].ToString();
XmlNode synctime = root.SelectSingleNode("/root/synctime");
synctime.InnerText = dr["synctime"].ToString();
XmlNode readytime = root.SelectSingleNode("/root/readytime");
readytime.InnerText = dr["readytime"].ToString();
XmlNode notifytime = root.SelectSingleNode("/root/notifytime");
notifytime.InnerText = dr["notifytime"].ToString();
XmlNode task_status = root.SelectSingleNode("/root/task_status");
task_status.InnerText = dr["task_status"].ToString();
XmlNode address = root.SelectSingleNode("/root/address");
address.InnerText = dr["address"].ToString();
xmldoc.Save(path);
}
m_log.Info("xml新建成功,准备压缩");


(4)进行压缩文件夹

(5)如果压缩成功,则删除原文件夹

//压缩
SevenZipTool zipTool = new SevenZipTool();
string message=zipTool.CompressDirectory(filePath, filePath+".zip");
if (message.Contains("成功"))
{
m_log.Info("压缩成功,准备删除");
DirectoryInfo di = new DirectoryInfo(filePath);
di.Delete(true);
m_log.Info("删除成功");
}


SevenZipTool是一个类:集成7z文件解压、压缩功能。这个类如果需要,请在博客下方留言~

方案二:控制台程序+windows定时计划

(一)配置文件内容:1、连接sqlite数据库;2、导出的xml文件,新建的压缩包的存储路径;

代码思路:

(1)查询内容到datatable中;

(2)若有内容,则先在压缩包存放路径新建一个文件夹,命名:“固定格式”-“时间戳”;

(3)xml需要从当前运行exe相对路径中复制到文件夹中,命名根据某两个字段命名

windows定时任务

Win7怎么设置定时自动执行任务

这个是导出xml并压缩功能,下一篇,解压并读取xml到postgresql
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐