读书人

启动一个线程写入数据库 在写入数据库

发布时间: 2012-02-05 12:07:14 作者: rapoo

启动一个线程写入数据库 在写入数据库的时候可以终止此线程 急啊!请大家帮忙!
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;
}

读书人网 >C#

热点推荐