凡科做网站的方法,wordpress备份如何安装,加快信用网站建设,网站 解析批量导入现在基本已经成为各类系统的标配了#xff0c;当前#xff0c;我们订餐系统也不例外#xff0c;什么商家呀、商品呀、优惠码之类的#xff0c;都少不了。毕竟嘛#xff0c;对非开发人员来说#xff0c;看到Excel肯定比看到很多管理系统还是要亲切很多的。这里当前我们订餐系统也不例外什么商家呀、商品呀、优惠码之类的都少不了。毕竟嘛对非开发人员来说看到Excel肯定比看到很多管理系统还是要亲切很多的。这里我就分享下自己如何一步步踩坑、爬坑到最后完成Excel批量导入的历程。或许你还有更好的方案不妨也分享下当然也希望能给正在坑中或者爬坑的同仁们一点帮助。 注Excel操作用了 org.in2bits.myxls.dll 这个不知道是否是免费的没仔细查过。 年轻时的代码是我们曾经年轻过的证明 第一次遇到Excel批量导入时很自然的onclick,INSERT...本地用只有几条数据的Excel测试正常select下呀! 数据正常导入笑咪咪的生成、发布ok搞定。客户使用时用了几百条数据的Excel导入会出现什么问题相信大家都知道吧多半是执行超时于是再baidu,google...原来可以设置executionTimeout。【设置这个后应该还有问题就是想不起了来于是才有了下文】 努力不一定成功但一定在成长 当我费尽心思希望通过设置解决超时问题处处碰壁后才知道这个通常要用多线程。那会才知道见识有多重要才知道多看博客有多重要。一翻baidu,google后有了下面的代码。 protected void btDo_Click(object sender, EventArgs e){Thread t new Thread(new ThreadStart(InportUser));t.Start();}public void InportUser(){///读取excel循环insert} View Code 这样写超时的情况变少了好像也会具体什么时候真是惭愧没有好好研究过但是有一个不能接受的现像就是我不知道什么时候执行完了也就不知道什么时候可以关浏览器。那会儿只想到了一个好笨的办法一直select看条数还有没有增加。由于一直没有找到好的办法这个情况一直存在于我们系统中很长时间也像一个石头一直压在我心中每每看到心里总是隐隐不快我都不能接受的东西还要让客户去接受。。。直到前不久才看到 BackgroundWorker 。那会才知道见识有多重要才知道多看博客有多重要。 失败让我们慢慢蜕去年轻的印记 BackgroundWorker 具体内容这里就不去写了baidu,google,msdn有全面、权威的介绍。我只分享下这个过程中自己踩的坑吧 1.一直没执行 DoWork也没有错误日志您可能页面中没有加入 Asynctrue。 2.HttpContext.Current 为null当时要在DoWork中为每个记录生成一个二维码图片在一个类中生成HttpContext.Current.Server一直为空瞬间想起之前有个博客是《HttpContext.Curren并非无处不在》当时一下就知道了多看博客有多重要。 3.执行不超时数据库链接可能会超时。这个和BackgroundWorker没什么关系不过好像一起出现的概率比较大哦。正常情况简单一句SqlCommand.CommandTimeout 0; 就ok了。 关于BackgroundWorker的代码应该随便一搜就是一箩筐我还是帖下自己的吧愿意搜索的自己搜索吧愿意将就的就看下下面的吧 aspx主要代码主要就是一个设置和上传控件的问题 % Page LanguageC# AutoEventWireuptrue CodeFileimportshopcart.aspx.cs InheritsimportshopcartAsynctrue %asp:FileUpload runatserver IDfuFoodExcel /asp:Button IDbtSave runatserver CssClassbutton_1 OnClickbtSave_ClickText导入 OnClientClick showload_super();/asp:Buttona hrefdemo.xls下载模版/a View Code aspx.cs主要代码只实现了执行完成方法这点就是之前一直无法实现的东西开始执行时弹出加载框执行完成可以进行提示详细的东西大家可以自己动手搜索下。 protected void btSave_Click(object sender, EventArgs e){bgw new BackgroundWorker();bgw.WorkerSupportsCancellation true;bgw.WorkerReportsProgress true;bgw.DoWork new DoWorkEventHandler(DoWork);bgw.RunWorkerCompleted new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);bgw.RunWorkerAsync();}/// summary/// 耗时操作/// /summary/// param namesender/param/// param namee/paramvoid DoWork(object sender, DoWorkEventArgs e){string suffix ;if (this.fuFoodExcel.HasFile){suffix Path.GetExtension(this.fuFoodExcel.PostedFile.FileName);if (suffix .xls || suffix .XLS){}else{msg 文件格式不正确请上传excel文件;return;}}else{msg 请上传excel文件;return;}string filepath ~/upload/excel/;if (!System.IO.Directory.Exists(Server.MapPath(filepath))){System.IO.Directory.CreateDirectory(Server.MapPath(filepath));}string sFile filepath System.DateTime.Now.ToString(yyyyMMddHHmmssffff) suffix; //上传后文件的新名//保存文件try{this.fuFoodExcel.PostedFile.SaveAs(Server.MapPath(sFile));}catch (Exception ex){HJlog.toLog(ex.ToString());return;}//必要的判断以防止excel格式的问题导致程序错误try{//解析文件并保存数据到数据库XlsDocument xls new XlsDocument(Server.MapPath(sFile));Worksheet sheet xls.Workbook.Worksheets[0];//excel格式:第一行是说明第二行是标题,第三行开始是数据for (int i 3; i sheet.Rows.Count; i) //{if (sheet.Rows[ushort.Parse(i.ToString())] ! null sheet.Rows[ushort.Parse(i.ToString())].CellCount 1 sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse(1)) ! null sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse(1)).Value ! null){addressbookInfo mm new addressbookInfo();mm.Parentid 0;mm.Status 0;mm.Isdel 0;mm.Classname sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse(1)).Value.ToString();mm.Depth 2;mm.Priority 0;mm.Pic sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse(2)).Value.ToString();mm.Revevar sheet.Rows[ushort.Parse(i.ToString())].GetCell(ushort.Parse(3)).Value.ToString();mm.path ChineseConvert.UtilIndexCode(mm.Classname);dal.Add(mm);count;}else{break;}}}catch (Exception ex){msg 导入出错请检查excel;HJlog.toLog(ex.ToString());return;}msg 操作成功已经导入 count 个地址。;}/// summary/// 完成/// /summary/// param namesender/param/// param namee/paramvoid bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e){string tipmsg ;if (count 0){tipmsg 操作未完成, msg;}else{tipmsg msg;}AlertScript.RegScript(this.Page, alert( tipmsg );hideload_super(););} View Code 执行过程和完成提示效果 结语 文章到此就结束了分享还会继续。说实在的很多细节其实我自己也不是很清楚有错误的地方请指正也希望能给部分园子里的同学带来帮助。 成为一名优秀的程序员 转载于:https://www.cnblogs.com/jijunjian/p/3489649.html