C#定时执行某一个功能二(解压并读取xml到postgresql)
来源:互联网 发布:呼叫中心系统源码 编辑:程序博客网 时间:2024/06/03 23:44
继上一篇: C#定时执行某一个功能一(sqlite导出xml并压缩)
下面我要来讲一下:如何对这些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定时任务:在上一篇博客进行了介绍了。
阅读全文
0 0
- C#定时执行某一个功能二(解压并读取xml到postgresql)
- C#定时执行某一个功能一(sqlite导出xml并压缩)
- android解压zip到sdcard,并读取解压缩后文件中的xml特定信息,并保存到数据库
- 定时反复执行某一个任务
- ios 定时执行某一个方法
- C# : 读取XML文件 (二)
- C#创建windows服务并定时执行
- C#创建windows服务并定时执行
- C# 创建系统服务并定时执行
- C# 读取 XML 到TreeView
- 定时循环执行某一个脚本的方法
- xml读取并转存到map中
- C#读取Excel并转化成Xml
- quartz定时执行任务,并配置web.xml的操作方法
- C#来创建和读取XML文档(二)
- C#以二制的方式同时存储文字和图片到sqlserver,并读取
- c#读取数据库到xml文件中
- C#读取xml文档数据到DataSet
- JobScheduler服务
- 试试54款开源服务器软件 (比较知名的软件大集合)
- Java File 类的使用方法
- sql语句之group_concat函数
- Hive学习指南(四)
- C#定时执行某一个功能二(解压并读取xml到postgresql)
- linux 远程登录执行命令
- ANdroid的崩溃总结
- 双向循环链表简单的插入、删除、修改以及查找功能的实现
- opencv(21)---轮廓属性特征以及应用之凹包
- liunx centos 搭建配置apache2.4+php5.6.30
- error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
- IPC通信
- 解决the virtual device got no ip address情况之一