首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

启动一个线程写入数据库 在写入数据库的时候可以终止此线程 急请大家帮忙!解决方法

2012-02-05 
启动一个线程写入数据库 在写入数据库的时候可以终止此线程 急啊!请大家帮忙!1.读取EXCEL中的数据然后启动

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

热点排行