启动一个线程写入数据库 在写入数据库的时候可以终止此线程 急啊!请大家帮忙!
1.读取EXCEL 中的数据 然后启动一个线程写入数据库 在写入数据库的时候可以终止此线程,在第一次导入的时候是可以的 但是在导入终止先程的时候会出问题! 请大家帮忙看看哪里有问题!
2.想加个进度条 请问在什么事件的时候写!
private Thread m_UpLoadDataThread;
private OleDbConnection oleConnection;
DataSet m_DataSet = new DataSet();
ZhiLingInfo info = new ZhiLingInfo();
//导入按钮
void toolStripButtonLaiLiaoBuLiang_Click(object sender, EventArgs e)
{
CCursor.Current = Cursors.WaitCursor;
this.m_BindingList.Clear();
try
{
OpenFileDialog dlg = new OpenFileDialog();
dlg.Title = "导入来料不良信息 ";
dlg.Filter = "(*.xls)|*.xls ";
dlg.RestoreDirectory = true;
if (dlg.ShowDialog() == DialogResult.OK)
{
this.dataGridView.Refresh();
#region 连接Excel
string strConnection = "Provider=Microsoft.Jet.OLEDB.4.0; " + "Data Source = " + dlg.FileName + ";Extended Properties = Excel 8.0 ";
oleConnection = new OleDbConnection(strConnection);
string strCommondText = @ "SELECT * FROM [返品信息导入$] ";
oleConnection.Open();
// DataSet m_DataSet = new DataSet();
OleDbDataAdapter oleAdper = new OleDbDataAdapter(strCommondText, oleConnection);
oleAdper.Fill(m_DataSet, "返品信息导入 ");
#endregion
this.m_UpLoadDataThread = new Thread(new ThreadStart(this.UpLoadLaiLiaoBuLiang));
this.m_UpLoadDataThread.IsBackground = true;
this.m_UpLoadDataThread.Start();
oleConnection.Close();
}
}
catch (Exception ex)
{
this.m_Helper.ShowException(ex);
}
finally
{
Cursor.Current = Cursors.Default;
}
}
//写数据库
private void UpLoadLaiLiaoBuLiang()
{
try
{
foreach (DataRow row in m_DataSet.Tables[0].Rows)
{
#region Info赋值
info.YeWuLeiXingID = row[ "业务类型代码 "].ToString();
info.FJDWDaiMa = row[ "发件单位代码 "].ToString();
info.FJDWMingCheng = row[ "发件单位名称 "].ToString();
info.FJChengShi = row[ "发件城市 "].ToString();
info.FJRen = row[ "发件人 "].ToString();
info.FJRenDianHua = row[ "发件人电话 "].ToString();
//插入数据库
ClientHelper.ProphaseManagerProxy.AddLaiLiaoBuLiangZhiLing(this.m_Helper.Ticket, info);
// 添加显示列表
this.m_BindingList.Add(info);
}
}
catch (Exception ex)
{
this.m_Helper.ShowException(ex);
}
finally
{
this.m_DataSet.Clear();
}
}
//停止此线程
void toolStripButtonStop_Click(object sender, EventArgs e)
{
this.m_UpLoadDataThread.Abort();
}
[解决办法]
线程终止不应当用abort()来完成,应当设置一个变量,依据这个变量提前结束循环。
[解决办法]
设置变量,用线程判断变量的状态来决定是否执行
进度条的做法,先算出总的插入条数,作为进度条的最大值,然后每执行一条,进度条根据已执行的条数移到即可
[解决办法]
//写数据库
private void UpLoadLaiLiaoBuLiang()
{
try
{
foreach (DataRow row in m_DataSet.Tables[0].Rows)
{
#region Info赋值
if(stop)
return;
info.YeWuLeiXingID = row[ "业务类型代码 "].ToString();
info.FJDWDaiMa = row[ "发件单位代码 "].ToString();
info.FJDWMingCheng = row[ "发件单位名称 "].ToString();
info.FJChengShi = row[ "发件城市 "].ToString();
info.FJRen = row[ "发件人 "].ToString();
info.FJRenDianHua = row[ "发件人电话 "].ToString();
//插入数据库
ClientHelper.ProphaseManagerProxy.AddLaiLiaoBuLiangZhiLing(this.m_Helper.Ticket, info);
// 添加显示列表
this.m_BindingList.Add(info);
//调用更新进度条的委托
}
}
catch (Exception ex)
{
this.m_Helper.ShowException(ex);
}
finally
{
this.m_DataSet.Clear();
}
}
public void Stop()
{
stop = true;
}