C#定时执行某一个功能二(解压并读取xml到postgresql)
2017-05-22 07:59
537 查看
继上一篇: C#定时执行某一个功能一(sqlite导出xml并压缩)
下面我要来讲一下:如何对这些xml解压,读取到postgresql数据库中
依旧是两种方案:1、windows服务;2、控制台程序+windows定时计划
方案一:windows服务
1、读取config中的扫描时间间隔
服务在启动时新建 一个timer、timer事件中判断用户的类型,如果是定时执行,就去判断当前事件是否与用户指的时间相同,若相同就执行,否则不执行;
2、寻找符合条件的压缩包,解压;
3、读取xml中数据到datatable中,并插入到postgresql数据库中
SevenZipTool是一个类:集成7z文件解压、压缩功能。这个类如果需要,请在博客下方留言~
方案二:控制台程序+windows定时计划
控制台程序与上面的相同,都是1、查找压缩包,进行解压;2、读取xml到postgresql中;
windows定时任务:在上一篇博客进行了介绍了。
下面我要来讲一下:如何对这些xml解压,读取到postgresql数据库中
依旧是两种方案:1、windows服务;2、控制台程序+windows定时计划
方案一:windows服务
1、读取config中的扫描时间间隔
服务在启动时新建 一个timer、timer事件中判断用户的类型,如果是定时执行,就去判断当前事件是否与用户指的时间相同,若相同就执行,否则不执行;
2、寻找符合条件的压缩包,解压;
try { //先找到符合要求的压缩包 string[] strFiles = Directory.GetFiles(SystemSettings.DecompressonRoot, "outnet-orderinfo-*.zip", SearchOption.AllDirectories); m_log.Info(strFiles.Length); foreach (string strSF in strFiles) { m_log.Info("准备解压"); //解压 string outputDirectory = strSF.Substring(0, strSF.Length - 4); SevenZipTool zipTool = new SevenZipTool(); string message = zipTool.ExtractFile(strSF, outputDirectory); if (message.Contains("成功")) { m_log.Info("解压成功"); //读取xml string[] strXmls = Directory.GetFiles(outputDirectory, "*.xml", SearchOption.AllDirectories); m_log.Info("xml全部读到strXmls中"); bool flag = ToPostgreSql(strXmls); if (flag == true) { DirectoryInfo di = new DirectoryInfo(outputDirectory); di.Delete(true); m_log.Info("删除解压后文件成功"); File.Delete(strSF); m_log.Info("删除压缩包成功"); } } } } catch (Exception ex) { m_log.Error(ex); }
3、读取xml中数据到datatable中,并插入到postgresql数据库中
public bool ToPostgreSql(string[] strXmls) { try { List<string> sqllist = new List<string>(); foreach (string strXml in strXmls) { XmlDocument xmlDoc = new XmlDocument(); string orderid = ""; string batchid = ""; long obsize = 0; long obfinish = 0; DateTime submittime; DateTime createtime; DateTime synctime; DateTime readytime; DateTime notifytime; string task_status = ""; string address = ""; string taskid = ""; xmlDoc.Load(strXml); XmlNode xnorderid = xmlDoc.SelectSingleNode("root/orderid"); orderid = xnorderid.InnerText; XmlNode xnbatchid = xmlDoc.SelectSingleNode("root/batchid"); batchid = xnbatchid.InnerText; taskid = orderid + "_" + batchid; XmlNode xnobsize = xmlDoc.SelectSingleNode("root/obsize"); obsize = Convert.ToInt64(xnobsize.InnerText); XmlNode xnobfinish = xmlDoc.SelectSingleNode("root/obfinish"); obfinish = Convert.ToInt64(xnobfinish.InnerText); XmlNode xnsubmittime = xmlDoc.SelectSingleNode("root/submittime"); submittime = Convert.ToDateTime(xnsubmittime.InnerText); XmlNode xncreatetime = xmlDoc.SelectSingleNode("root/createtime"); createtime = Convert.ToDateTime(xncreatetime.InnerText); XmlNode xnsynctime = xmlDoc.SelectSingleNode("root/synctime"); synctime = Convert.ToDateTime(xnsynctime.InnerText); XmlNode xnreadytime = xmlDoc.SelectSingleNode("root/readytime"); readytime = Convert.ToDateTime(xnreadytime.InnerText); XmlNode xnnotifytime = xmlDoc.SelectSingleNode("root/notifytime"); notifytime = Convert.ToDateTime(xnnotifytime.InnerText); XmlNode xntask_status = xmlDoc.SelectSingleNode("root/task_status"); task_status = xntask_status.InnerText; XmlNode xnaddress = xmlDoc.SelectSingleNode("root/address"); address = xnaddress.InnerText; string selectsql = "select taskid from bpds_task_test where taskid='" + taskid + "' "; DataTable tmpDt = pgHelper.Query(selectsql); string sql = ""; if (tmpDt.Rows.Count != 0) { sql = string.Format("update bpds_task_test set orderid='{0}',batchid='{1}', obsize='{2}',obfinish='{3}',submittime='{4}', createtime='{5}', synctime='{6}',readytime='{7}', notifytime='{8}',task_status='{9}', address='{10}'where taskid='{11}'", orderid, batchid,obsize,obfinish,submittime,createtime,synctime,readytime,notifytime,task_status,address,taskid); } else { sql = "insert into bpds_task_test (taskid,orderid,batchid,obsize,obfinish,submittime,createtime,synctime,readytime,notifytime,task_status,address) values ('" + taskid + "','" + orderid + "','" + batchid + "','" + obsize + "','" + obfinish + "','" + submittime + "', '" + createtime + "', '" + synctime + "', '" + readytime + "', '" + notifytime + "', '" + task_status + "', '" + address + "') "; } sqllist.Add(sql); } m_log.Info("xml读取完毕,准备写入数据库"); bool flag = pgHelper.ExecuteTransSQL(sqllist); return flag; } catch (Exception ex) { m_log.Error(ex); return false; } }
SevenZipTool是一个类:集成7z文件解压、压缩功能。这个类如果需要,请在博客下方留言~
方案二:控制台程序+windows定时计划
控制台程序与上面的相同,都是1、查找压缩包,进行解压;2、读取xml到postgresql中;
windows定时任务:在上一篇博客进行了介绍了。
相关文章推荐
- C#定时执行某一个功能一(sqlite导出xml并压缩)
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- [转]推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler
- 推荐一个简单、轻量、功能非常强大的C#/ASP.NET定时任务执行管理器组件–FluentScheduler定时器
- C# 读取与修改xml一个节点的值
- C#winForm程序定时执行某各功能--定时检查更新
- C# 读取与修改xml一个节点的值
- C# 定时执行一个方法
- 一个可以完成读取、打印输出、保存xml等等功能的java例子
- C#定时执行一个操作
- C# 定时执行一个方法
- 用C#实现的一个简单任务机,解决了一般任务机无法定时执行任务的问题
- js replace 全局替换 以表单的方式提交参数 判断是否为ie浏览器 将jquery.qqFace.js表情转换成微信的字符码 手机端省市区联动 新字体引用本地运行可以获得,放到服务器上报404 C#提取html中的汉字 MVC几种找不到资源的解决方式 使用Windows服务定时去执行一个方法的三种方式
- C#定时执行一个操作
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
- 一个经过改良的XMLHelper(包含了序列化,反序列化,创建xml文件,读取节点,C#对象与xml文件的相互转换等等。)
- 这是一个关于XML文档的操作管理器XMLHelper类,类中包括XML文档的创建,文档节点和属性的读取,添加,修改,删除的方法功能的实现