下面的程序如果存10W条数据,用多线程怎么改,并且有进度条,最好带上注解,谢谢
private void simpleButton3_Click(object sender, EventArgs e)
        {
            
                       if (textEdit1.Text == "")
            {
                MessageBox.Show("请选择要导入的Excel文档!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);                return;
            }
            //if (dataGridView1.Columns[0].DataPropertyName != dataGridView1.Columns[1].DataPropertyName)
            //{
                
            //    dataGridView1.Columns[0].DataPropertyName = null;
            //    return;
            //}            
            
            string strconn = "server=.;database=boco_mo;uid=sa;pwd=123456";
            SqlConnection conn = new SqlConnection(strconn);            conn.Open();
            try
            {
                DataSet ds = new DataSet();
                ds = xsldata(textEdit1.Text);
                int errorcount = 0;//记录错误信息条数                int insertcount = 0;//记录插入成功条数                int updatecount = 0;//记录更新信息条数                string Filename = System.IO.Path.GetFileNameWithoutExtension(textEdit1.Text);
                DateTime ImportTime = DateTime.Now;
                string ImportUser = "sa";
                int ImportUserID = 123;
                string TemplateName = comboBox1.Text;
                //存取EXCEL中的数据
                progressBarControl1.Properties.Maximum = ds.Tables[0].Rows.Count;
                for (int i = 1; i < ds.Tables[0].Rows.Count; i++)
                {                    
                    string cgi = ds.Tables[0].Rows[i][0].ToString();
                    string name = ds.Tables[0].Rows[i][1].ToString();
                    string zh_name = ds.Tables[0].Rows[i][2].ToString();
                    int lac =Convert.ToInt32(ds.Tables[0].Rows[i][3].ToString());
                    int ci = Convert.ToInt32(ds.Tables[0].Rows[i][4].ToString());
                    string bts_code = ds.Tables[0].Rows[i][5].ToString();
                    string msc_code = ds.Tables[0].Rows[i][6].ToString();
                    string join_group = ds.Tables[0].Rows[i][7].ToString();
                    string input_date = Convert.ToDateTime(ds.Tables[0].Rows[i][8].ToString()).ToString("yyyy-MM-dd");
                                        if (cgi!=""&&name!="")
                    {
                        SqlCommand selectcmd = new SqlCommand("select * from beijian where  cgi='" + cgi + "'and name='" + name + "'and input_date='" + input_date + "'", conn);
                        int count = Convert.ToInt32(selectcmd.ExecuteNonQuery());
                        if (count > 0)
                        {
                            updatecount++;
                        }
                        else
                        {                            SqlCommand insertcmd = new SqlCommand("insert into beijian(cgi, name, zh_name, lac, ci, bts_code, msc_code, join_group, input_date,Filename) values('" + cgi + "','" + name + "','" + zh_name + "'," + lac + "," + ci + ",'" + bts_code + "','" + msc_code + "','" + join_group + "','" + input_date + "','"+Filename+"')", conn);
                            progressBarControl1.Increment(i);
                            insertcmd.ExecuteNonQuery();
                            insertcount++;
                        }
                    }
                    else
                    {
                        errorcount++;
                    }
                   
                }                //存取excel文件名时间                SqlCommand sqlinsert = new SqlCommand("insert into ImportFile(Filename,ImportTime,ImportUser,ImportUserID,TemplateName)values('" + Filename + "','" + ImportTime + "','" + ImportUser + "'," + ImportUserID + ",'" + TemplateName + "')", conn);
                sqlinsert.ExecuteScalar();
                
                MessageBox.Show(insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
                conn.Close();
            }    
        }

解决方案 »

  1.   

            private void DoThr()
            {
                if (textEdit1.Text == "")
                {
                    MessageBox.Show("请选择要导入的Excel文档!", "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }
                string strconn = "server=.;database=boco_mo;uid=sa;pwd=123456";
                SqlConnection conn = new SqlConnection(strconn);
                conn.Open();
                try
                {
                    DataSet ds = new DataSet();
                    ds = xsldata(textEdit1.Text);
                    int errorcount = 0;//记录错误信息条数                int insertcount = 0;//记录插入成功条数                int updatecount = 0;//记录更新信息条数                string Filename = System.IO.Path.GetFileNameWithoutExtension(textEdit1.Text);
                    DateTime ImportTime = DateTime.Now;
                    string ImportUser = "sa";
                    int ImportUserID = 123;
                    string TemplateName = comboBox1.Text;                //存取EXCEL中的数据                //进度条?
                    this.Invoke(new MethodInvoker(delegate
                    {
                        progressBarControl1.Maximum = ds.Tables[0].Rows.Count;
                        progressBarControl1.Minimum = 1;
                        progressBarControl1.Value = 1;
                    }));
                    for (int i = 1; i < ds.Tables[0].Rows.Count; i++)
                    {
                        string cgi = ds.Tables[0].Rows[i][0].ToString();
                        string name = ds.Tables[0].Rows[i][1].ToString();
                        string zh_name = ds.Tables[0].Rows[i][2].ToString();
                        int lac = Convert.ToInt32(ds.Tables[0].Rows[i][3].ToString());
                        int ci = Convert.ToInt32(ds.Tables[0].Rows[i][4].ToString());
                        string bts_code = ds.Tables[0].Rows[i][5].ToString();
                        string msc_code = ds.Tables[0].Rows[i][6].ToString();
                        string join_group = ds.Tables[0].Rows[i][7].ToString();
                        string input_date = Convert.ToDateTime(ds.Tables[0].Rows[i][8].ToString()).ToString("yyyy-MM-dd");
                        if (cgi != "" && name != "")
                        {
                            SqlCommand selectcmd = new SqlCommand("select * from beijian where cgi='" + cgi + "'and name='" + name + "'and input_date='" + input_date + "'", conn);
                            int count = Convert.ToInt32(selectcmd.ExecuteNonQuery());
                            if (count > 0)
                            {
                                updatecount++;
                            }
                            else
                            {                            SqlCommand insertcmd = new SqlCommand("insert into beijian(cgi, name, zh_name, lac, ci, bts_code, msc_code, join_group, input_date,Filename) values('" + cgi + "','" + name + "','" + zh_name + "'," + lac + "," + ci + ",'" + bts_code + "','" + msc_code + "','" + join_group + "','" + input_date + "','" + Filename + "')", conn);
                                insertcmd.ExecuteNonQuery();
                                insertcount++;
                            }
                        }
                        else
                        {
                            errorcount++;
                        }                    //更新进度条
                        this.Invoke(new MethodInvoker(delegate
                        {
                            progressBar1.PerformStep();
                        }));
                    }                //存取excel文件名时间                SqlCommand sqlinsert = new SqlCommand("insert into ImportFile(Filename,ImportTime,ImportUser,ImportUserID,TemplateName)values('" + Filename + "','" + ImportTime + "','" + ImportUser + "'," + ImportUserID + ",'" + TemplateName + "')", conn);
                    sqlinsert.ExecuteScalar();                MessageBox.Show(insertcount + "条数据导入成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导入!");
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
                finally
                {
                    conn.Close();
                }        }        private void simpleButton3_Click(object sender, EventArgs e)
            {
                Thread thr = new Thread(new ThreadStart(DoThr));
                thr.IsBackground = true;
                thr.Start();
            }
      

  2.   

    唉唉唉,这样写代码不行哎。一个方法不能超过20行。
    lz是想实现异步的功能吧,并不是多线程。
    可以用delegate的异步调用来解决这个问题。用另外一个线程也可以。
    至于进度条的访问,在非UI线程是不能直接访问空间的属性的。要通过控件的Invoke方法调用一个delegate来实现。否则会异常。
    总而言之,lz不把delegate搞娴熟了,是没法做这个问题的。
    msdn中有关于delegate以及event的帮助。lz仔细看看吧。
      

  3.   

    不好意思,这几天没上CSDN,问题早解决了,只是工作太忙,现在给你们分咯