xml文件实现一次性导入功能(泉州)
来源:互联网 发布:剑网三dbm数据库 编辑:程序博客网 时间:2024/05/16 00:34
1.Import.ashx.cs文件代码内容:
public void ProcessRequest(HttpContext context) {context.Response.Clear();string username = context.Request.QueryString["username"];//操作人 HttpFileCollection postedFile = context.Request.Files; //判断是否有数据 if (postedFile != null && postedFile.Count > 0) { int length = postedFile[0].ContentLength;//文件大小 string filename = System.IO.Path.GetFileNameWithoutExtension(postedFile[0].FileName);//文件名,不包括扩展名string path = HttpContext.Current.Server.MapPath("/XmlFiles/");//文件存放路径if (!System.IO.Directory.Exists(path))System.IO.Directory.CreateDirectory(path);//创建文件夹string allfile = path + filename + DateTime.Now.ToString("yyyy-MM-dd") + ".xml";//文件路径+文件名 postedFile[0].SaveAs(allfile);//保存文件内容 if (length > 0 && length < 512000)//文件最大允许500k { string type = System.IO.Path.GetExtension(postedFile[0].FileName);//文件类型if (type == ".xml"){//读取文件QzSpecialisticDAL dal = new QzSpecialisticDAL();QZ_IMPORT_LOG log = new QZ_IMPORT_LOG();try{XmlDocument xmlDoc = new XmlDocument();//加载xml xmlDoc.Load(allfile); //path+filename为文件路径//读取指定的节点#region 1.配送台账:读取QZ_DISPATCH_DETAILS节点QZ_DISPATCH_DETAILS details = dal.GetModels<QZ_DISPATCH_DETAILS>(xmlDoc, "/QZ_SPECIALISTIC/QZ_DISPATCH_DETAILS");dal.InsertXmlData(details.DetailList, username, out log);log.IMPORT_NAME = "配送台账";//导入界面if (!dal.AddImportLog(log)){string res1 = "{\"status\" : \"success\",\"msg\": \"配送台账日志插入错误上传失败!\"}";context.Response.Write(res1);return;}#endregion#region 2.零售台账:读取QZ_SPECIALISTIC_SALEDETAILS节点QZ_SPECIALISTIC_SALEDETAILS sales = dal.GetModels<QZ_SPECIALISTIC_SALEDETAILS>(xmlDoc, "/QZ_SPECIALISTIC/QZ_SPECIALISTIC_SALEDETAILS");dal.InsertXmlData(sales.DetailList, username, out log);log.IMPORT_NAME = "零售台账";//导入界面 if (!dal.AddImportLog(log)){string res1 = "{\"status\" : \"success\",\"msg\": \"零售台账日志插入错误上传失败!\"}";context.Response.Write(res1);return;}#endregionstring res = "{\"status\" : \"success\",\"msg\": \"上传成功!\"}";context.Response.Write(res);}catch (Exception e){string res = "{\"status\" : \"error\",\"msg\": \"文件格式错误上传失败!\"}";context.Response.Write(res);return;} }else{string res = "{\"status\" : \"error\",\"msg\": \"只允许上传.xml类型的文件!\"}";context.Response.Write(res);return;} } else { string res = "{\"status\" : \"error\",\"msg\": \"文件过大!\"}"; context.Response.Write(res); return; } } }
2.所调用方法:
InsertXmlData方法,实现入库校验操作:
public void InsertXmlData<T>(List<T> models,string username,out QZ_IMPORT_LOG logmodel) where T : new(){QZ_IMPORT_LOG log =new QZ_IMPORT_LOG();int sum = models.Count;int j = 0;string mismessage = "";string[] s = models.ToString().Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries);string model = s[s.Length - 1].Replace("]", "").Trim();if (models != null)//判断节点下是否有子节点 {//循环遍历detail结点下的子结点 foreach (T submodel in models){//校验Id是否重复 string id = submodel.GetType().GetProperty("ID").GetValue(submodel,null).ToString();if (ExixtsID(model, id)){if (OracleHelper.Insert<T>(submodel))//插入数据库{j++;//成功上传条数 }else{//上传失败mismessage += "id=" + id + "数据插入错误,上传失败;";}}else{//上传失败mismessage += "id=" + id + "已导入;";}} //录入上传日志数据log.IMPORT_DATE = DateTime.Now;//导入时间 log.IMPORT_TABLENAME = model;//导入表名log.IMPORT_NUM = sum;//导入总条数log.IMPORT_NUM_OK = j;//导入成功条数log.REMARK = mismessage;//未成功错误信息 log.OPERATOR = username;//操作人}logmodel = log;}
GetModels方法获取反序列化数据:
public T GetModels<T>(XmlDocument xmlDoc, string singleNode) where T : new(){XmlNode xmlNode = xmlDoc.SelectSingleNode(singleNode);StringReader stream = new StringReader(xmlNode.OuterXml);string xml = stream.ReadToEnd();return XmlDeserialize<T>(xml, Encoding.UTF8); }XmlDeserialize实现反序列化:
public T XmlDeserialize<T>(string s, Encoding encoding) where T : new(){if (string.IsNullOrEmpty(s))throw new ArgumentNullException("s");if (encoding == null)throw new ArgumentNullException("encoding");XmlSerializer mySerializer = new XmlSerializer(typeof(T));using (MemoryStream ms = new MemoryStream(encoding.GetBytes(s))){using (StreamReader sr = new StreamReader(ms, encoding)){return (T)mySerializer.Deserialize(sr);}}}
xml文件格式:
<QZ_SPECIALISTIC><QZ_SPECIALISTIC_DESTROYS> <QZ_SPECIALISTIC_DESTROY> <ID>4</ID> <DESTROY_DATE>2016-01-11</DESTROY_DATE> <SPECIALISTIC_ID>425002</SPECIALISTIC_ID> <SPECIALISTIC_NAME>yy</SPECIALISTIC_NAME><MEAT_CODE>101</MEAT_CODE> <MEAT_NAME>猪舌</MEAT_NAME> <WEIGHT>28</WEIGHT> <OPERATOR>ss</OPERATOR><UPLOAD_TYPE>2</UPLOAD_TYPE> </QZ_SPECIALISTIC_DESTROY> <QZ_SPECIALISTIC_DESTROY> <ID>5</ID> <DESTROY_DATE>2016-01-11</DESTROY_DATE> <SPECIALISTIC_ID>425002</SPECIALISTIC_ID> <SPECIALISTIC_NAME>ss</SPECIALISTIC_NAME><MEAT_CODE>102</MEAT_CODE> <MEAT_NAME>猪条</MEAT_NAME> <WEIGHT>t</WEIGHT> <OPERATOR>阿玉姐姐</OPERATOR><UPLOAD_TYPE>2</UPLOAD_TYPE> </QZ_SPECIALISTIC_DESTROY></QZ_SPECIALISTIC_DESTROYS><QZ_SPECIALISTIC_SURPLUSS> <QZ_SPECIALISTIC_SURPLUS> <ID>1</ID> <REGISTER_DATE>2016-01-11</REGISTER_DATE> <SPECIALISTIC_ID>425002</SPECIALISTIC_ID> <SPECIALISTIC_NAME>ss</SPECIALISTIC_NAME><span style="white-space:pre"></span><MEAT_CODE>102</MEAT_CODE> <MEAT_NAME>猪条</MEAT_NAME> <WEIGHT>150</WEIGHT> <OPERATOR>吴老大</OPERATOR><span style="white-space:pre"></span><UPLOAD_TYPE>2</UPLOAD_TYPE> </QZ_SPECIALISTIC_SURPLUS> <QZ_SPECIALISTIC_SURPLUS> <ID>2</ID> <REGISTER_DATE>2016-01-11</REGISTER_DATE> <SPECIALISTIC_ID>425002</SPECIALISTIC_ID> <SPECIALISTIC_NAME>ss</SPECIALISTIC_NAME><span style="white-space:pre"></span><MEAT_CODE>102</MEAT_CODE> <MEAT_NAME>猪条</MEAT_NAME> <WEIGHT>150</WEIGHT> <OPERATOR>吴老大</OPERATOR><span style="white-space:pre"></span><UPLOAD_TYPE>2</UPLOAD_TYPE> </QZ_SPECIALISTIC_SURPLUS></QZ_SPECIALISTIC_SURPLUSS></QZ_SPECIALISTIC>
0 0
- xml文件实现一次性导入功能(泉州)
- xml文件 实现“一次性”导入功能
- java文件导入功能的实现
- struts.xml文件提示功能的实现
- VC实现一次性读取文件全部内容
- jquery实现表单逐条登记,一次性提交功能
- PHP 使用PHPExcel实现文件导入与导出功能
- jquery easy ui 1.5实现文件导入功能
- ThinkPHP 使用PHPExcel实现文件导入与导出功能
- 导入导出xml文件
- solr导入xml文件
- 实体化XML,实现多条数据多个表一次性插入
- 批量导入功能实现
- 使用XML读写删除功能来实现资源文件配置
- 使用XML读写删除功能来实现资源文件配置
- Quartz实现定时功能 job.xml文件的配置
- Eclipse添加DTD文件实现xml的自动提示功能
- Eclipse添加DTD文件实现xml的自动提示功能
- java/scala下的最好用的数据绘图工具breeze-viz
- LLDB调试器使用简介
- android中自定义dialog中有editText,无法显示输入法对话框的解决办法
- 菜鸟学习Cocos2d-x 3.x——浅谈动作Action
- win10 远程桌面时,用户名密码无误,仍然提示凭证不工作问题 的解决办法
- xml文件实现一次性导入功能(泉州)
- 读取property文件内容
- Javaweb学习总结(五):JavaBean的作用域
- Library bin
- instr函数
- Uri.parse()调用
- How to Login Automatically into Website Using Excel VBA
- 显示全部控制台信息
- 三、lua coroutine