背景:
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新建成功,准备压缩");
(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("删除成功"); }
方案二:控制台程序+windows定时计划
(一)配置文件内容:1、连接sqlite数据库;2、导出的xml文件,新建的压缩包的存储路径;
代码思路:
(1)查询内容到datatable中;
(2)若有内容,则先在压缩包存放路径新建一个文件夹,命名:“固定格式”-“时间戳”;
(3)xml需要从当前运行exe相对路径中复制到文件夹中,命名根据某两个字段命名
windows定时任务
Win7怎么设置定时自动执行任务
这个是导出xml并压缩功能,下一篇,解压并读取xml到postgresql