下面的程序如果存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();
}
}
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();
}
}
{
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();
}
lz是想实现异步的功能吧,并不是多线程。
可以用delegate的异步调用来解决这个问题。用另外一个线程也可以。
至于进度条的访问,在非UI线程是不能直接访问空间的属性的。要通过控件的Invoke方法调用一个delegate来实现。否则会异常。
总而言之,lz不把delegate搞娴熟了,是没法做这个问题的。
msdn中有关于delegate以及event的帮助。lz仔细看看吧。