您的位置:首页 > 数据库

C#定时执行某一个功能二(解压并读取xml到postgresql)

2017-05-22 07:59 537 查看
继上一篇: 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定时任务:在上一篇博客进行了介绍了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐