导入数据思路+进度条

1.导入数据思路:

    C#winform程序中,要导入数据,给一个EXCEL模板,让用户按照给的模板填好数据,然后在程序中一条一条的进行导入数据。

比如

                 foreach (DataRow dr in dt.Rows)
                 {
                    //校区
                    XX0103BLL bll_xx0103 = new XX0103BLL();
                    XX0103Model.Base model_xx0103 = new XX0103Model.Base();
                    if (bll_xx0103.Exists("", dr["校区编号"].ToString(), dr["校区名称"].ToString()) == false)
                    {
                        //没有校区添加校区
                        model_xx0103.XQBH = dr["校区编号"].ToString();
                        model_xx0103.XQMC = dr["校区名称"].ToString();
                        bll_xx0103.Add(model_xx0103);
                    }
                   }

注意:这里要判段每一条数据是否符合规范,符合的才往数据库里面插入数据。不符合的就continue。

2.进度条

  2.1导入按钮的单击事件

        /// <summary>
        /// 导入数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_Import_Click(object sender, EventArgs e)
        {
            ProcessThread = new Thread(new ThreadStart(LoadBasicData));
            ProcessThread.IsBackground = true;
            ProcessThread.Start();
        }

2.2 LoadBasicData方法

     /// <summary>
        /// 基础数据导入
        /// </summary>
        private void LoadBasicData()
        {
            this.NowCount = 0;
            this.AllCount = 0;
            this.hasResult = false;
            try
            {
                DelegateShowProssBar mi = new DelegateShowProssBar(ShowProcessBar);
                this.BeginInvoke(mi, new object[] { "导入基础数据", "导入数据", true });
                Thread.Sleep(1000);//等待进度条弹出

                object[] objPar = new object[] { 0, "导入数据...\r" };
                object objReturn;
                this.Invoke(this.myIncrease, objPar);

                this.AllCount = dt.Rows.Count;
                this.wpf.SetMaxValue(this.AllCount);
                objPar = new object[] { this.NowCount, "开始导入数据...\r" };
                this.Invoke(this.myIncrease, objPar);
                foreach (DataRow dr in dt.Rows)
                {

                    this.NowCount++;
                    //校区
                    XX0103BLL bll_xx0103 = new XX0103BLL();
                    XX0103Model.Base model_xx0103 = new XX0103Model.Base();
                    if (bll_xx0103.Exists("", dr["校区编号"].ToString(), dr["校区名称"].ToString()) == false)
                    {
                        //没有校区添加校区
                        model_xx0103.XQBH = dr["校区编号"].ToString();
                        model_xx0103.XQMC = dr["校区名称"].ToString();
                        bll_xx0103.Add(model_xx0103);
                    }
                    //部门
                    XX0301BLL bll_xx0301 = new XX0301BLL();
                    XX0301Model.Base model_xx0301 = new XX0301Model.Base();
                    if (bll_xx0301.Exists("", dr["校区编号"].ToString(), dr["部门编号"].ToString(), dr["部门名称"].ToString()) == false)
                    {
                        model_xx0301.BMBH = dr["部门编号"].ToString();
                        model_xx0301.BMMC = dr["部门名称"].ToString();
                        model_xx0301.XQBH = dr["校区编号"].ToString();
                        bll_xx0301.Add(model_xx0301);
                    }
                    //专业
                    JX01BLL bll_jx01 = new JX01BLL();
                    JX01Model.Base model_jx01 = new JX01Model.Base();
                    if (bll_jx01.Exists("", dr["专业编号"].ToString()) == false)
                    {
                        model_jx01.ZYBH = dr["专业编号"].ToString();
                        model_jx01.ZYMC = dr["专业名称"].ToString();
                        model_jx01.BMBH = dr["部门编号"].ToString();
                        model_jx01.CC = dr["层次"].ToString();
                        bll_jx01.Add(model_jx01);
                    }
                    //用户
                    CustomerBLL bll_customer = new CustomerBLL();
                    CustomerModel.Base model_customer = new CustomerModel.Base();
                    if (bll_customer.Exists("", dr["考生号"].ToString()) == false)
                    {
                        model_customer.OutID = dr["考生号"].ToString();
                        model_customer.CardNo = int.Parse(dr["卡号"].ToString());
                        model_customer.Name = dr["姓名"].ToString();
                        model_customer.CardSN = int.Parse(dr["换卡序号"].ToString());
                        model_customer.Sex = dr["性别"].ToString();
                        model_customer.CustomerTypeID = int.Parse(dr["客户类别"].ToString());
                        model_customer.NJ = dr["年级"].ToString();
                        model_customer.ZYBH = dr["专业编号"].ToString();
                        model_customer.CardStatusID = int.Parse(dr["卡状态码"].ToString());
                        model_customer.IDCardNo = dr["身份证号"].ToString();
                        model_customer.CardTypeID = int.Parse(dr["卡类别码"].ToString());
                        model_customer.AddTime = DateTime.Now;
                        bll_customer.Add(model_customer);
                    }
                    if (!this.hasResult)
                    {
                        objPar = new object[] { this.NowCount, "" };
                        objReturn = this.Invoke(this.myIncrease, objPar);
                        hasResult = ((WaitProcessFormEx.ResStruct)objReturn).HasResult;
                        bool canceled = ((WaitProcessFormEx.ResStruct)objReturn).Canceled;

                        if (hasResult)
                        {
                            if (this.NowCount == this.AllCount)
                            {
                                // showResult(true, "完成!    ");
                            }
                            else
                            {
                                showResult(false, canceled ? "操作被取消!    " : "导入未完成!    ");
                                return;
                            }
                        }
                    }
                    else
                    {

                    }
                }
                objPar = new object[] { this.NowCount, "数据导入完成!" };
                this.Invoke(this.myIncrease, objPar);
            }
            catch
            {
                Error("错误", "数据导入错误");
            }
        }

3.提供一个读EXCEL,转DataTable的方法,注意:只能是excel2003或者excel2007的EXCEL表

        /// <summary>
        /// 读excel
        /// </summary>
        /// <param name="fileFullPath">excel路径</param>
        /// <returns></returns>
        public DataTable ReadExcel(string fileFullPath)
        {
            OleDbConnection myConn = null;
            OleDbDataAdapter myCommand = null;
            DataSet dst = null;
            string StrCon = "";
            if (fileFullPath.Substring(fileFullPath.LastIndexOf(".")).ToLower() == ".xls")
            {
                StrCon = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source=" + fileFullPath +
                    ";Extended Properties=‘Excel 8.0;HDR=Yes;IMEX=1‘";
            }
            else if (fileFullPath.Substring(fileFullPath.LastIndexOf(".")).ToLower() == ".xlsx")
            {
                StrCon = "Provider =Microsoft.ACE.OLEDB.12.0;Data Source=" + fileFullPath +
                                          ";Extended Properties=‘Excel 12.0;HDR=Yes;IMEX=1‘";
            }
            else if (fileFullPath.Substring(fileFullPath.LastIndexOf(".")).ToLower() == ".mdb")
            {
                StrCon = "  Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + fileFullPath + "; User Id=; Password=";
            }
            else
            {
                this.Error("错误", "文件格式不正确");
            }
            myConn = new OleDbConnection(StrCon);
            myConn.Open();//打开Excel连接
                          //查询excel文件中有多少张表
            DataTable dt = myConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);//查询所有表
            if (dt.Rows.Count == 0)
            {
                this.Error("错误", "文件中没有可用的表");
            }
            string sql = "select * from [{0}]";
            bool flag = false;
            foreach (DataRow d in dt.Rows)//列出所有表以供选择
            {
                if (d["TABLE_TYPE"].ToString().ToUpper() == "TABLE")
                {
                    //sql += d[2].ToString().Replace("‘", "");
                    sql = string.Format(sql, d[2].ToString().Replace("‘", ""));
                    flag = true;
                    break;
                }
            }
            if (flag == false)
            {
                this.Error("错误", "没有可用的表");
            }
            myCommand = new OleDbDataAdapter(sql, myConn);
            dst = new DataSet();
            myCommand.Fill(dst);
            return dst.Tables[0];
        }        
      
时间: 2024-11-05 20:45:56

导入数据思路+进度条的相关文章

数据导入与实时进度条实现

digiflow数据导入与实时进度条实现 本文档只是稍微解析下数据导入的流程,以及讲解实时进度条实现方法 [数据批量导入流程] 1.客户把.txt数据打包成.gz文件,发给我们. GZ文件格式,每个文件的第一行是唯一的数据,导入完成后要插入到ImportRecord表 名字格式:DigiFlow_南宁 - 平安出单中心_20100201_000100ECHW8P8708.txt 内容格式:以"||"为分割符 比如:00||000100ECHW8P8708||8||18:08:17 00

NET导入Excel带进度条。

[概述]几乎每个企业都有自己的核心东西或说是框架性的东西,框架的好处是将我们经常要使用的功能,控件等包装一个个 易于使用的单元,就算是初学者也极其容易上手,减少项目的开发成本.因此框架的重要性和好处是不言而喻的.在我的这个系列 (一点一滴打造我们自己的web开发框架系列 )当中,我将自己在开发过程中用到的一些东西陆续公布出来,和大家一起交流学习. 这次我们接着本框架系统的开发进展,将我们上一节开发的客户端进度条包装成一个服务器控件,方便以后的使用.上次我们开发 的进度条是通过setInterva

数据导出进度条

思路: 1.获得导出数据,统计数据总量 ( 文件搜索条件a,b,c等: 分页条件 a.起始页 b.偏移量 c.每页数据量): 2.将数据集A组装成需要下载的文件B (文件路径,缓存路径):后台接口 统计总量和总页数 将数据集进行组装到服务器下的存贮位置,开启一个新的线程.将数据组装进程(的进度)写入redis缓存,通过定时任务不断从缓存中读取数据,页面展现为下载的进度条. 3.下载B文件到本地(本地路径):(进度条读取到100%,开始执行下载导出) 原文地址:https://www.cnblog

基于jQuery加载进度条特效代码

基于jQuery加载进度条特效代码是一款简单的加载新数据,获取数据jQuery进度条代码. 在线预览   源码下载 实现的代码. html代码: <div id="main"> <div class="demo"> <div class="bars"> <span id="bar">55</span> </div> <div class="

网页加载进度条

( 网页加载时,有时内容过多,一直加载等待,而此时网页显示白色不显示任何的东西,给用户的体验相当不好,所以,一般会在网页加载成功前,会以进度条的形式,给用户进行展示.让用户可以看到动画,知道网页正在加载中) 常见的方式有以下: 1. 定时器的进度条(假的) <script type="text/javascript">     $(function(){         var loading='<div class="loading">&l

HTML5 jQuery+FormData 异步上传文件,带进度条

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link href="../resources/css/common.css" rel="stylesheet" /> <script src="../resources/js/jquery-2.1.4.js"></script> <

jQuery上传文件显示进度条

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <script src="../js/jquery.js"></script> </head> <body> <h2>HTML5异步上传文件,带进度条(jQuery)</h2> <form method="post"

jQuery 实现下载进度条

//ajax异步上传 $.ajax({ url: "${pageContext.request.contextPath }/upload", type: "POST", data: formData, xhr: function(){ //获取ajaxSettings中的xhr对象,为它的upload属性绑定progress事件的处理函数 myXhr = $.ajaxSettings.xhr(); if(myXhr.upload){ //检查upload属性是否存在

常用的网页加载进度条

下面有三种方式,看自己需求: 一.顶部进度条 在html代码中间插入jq代码  执行动画.页面加载到哪部分,进度条就会相应的向前走多少 当全部加载完成后将loading进度条模块隐藏 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content=&qu