2013-06-20 112 views
0

我有一种方法将数据插入到for loop内的MySql数据库中。带MySql的BackgroundWorker无法正常工作

插入的数量可能会很多,所以我的程序在插入过程中会冻结。

所以我想尽量把它放在一个BackgroundWorker,但它不工作按计划进行......

一些插入我得到我的连接已经打开一个异常后

这里是如何我这样做:

if (dbPos.connOpen()) 
{ 
    // inserts one row, works fine because data is present in db 
    dbPos.checkOut(prijs, wie); 

    // this works for a few inserts, 
    // but after a couple it will tell me my conn is already open 
    worker.RunWorkerAsync(); // inserts many rows 
} 
dbPos.connClose(); 

BackgroundWorker方法:

void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    for (int i = 0; i < chartList.Count; i++) 
    { 
     switch (this.countChart(i)) 
     { 
      ... Do work ... // insert rows 
     } 
    } 
} 

而且我的方法将实际值插入数据库:

using (MySqlCommand cmd = new MySqlCommand(query, conn)) 
{ 
    ... parameters .... 
    cmd.ExecuteNonQuery(); 
} 

因此,如何能解决我这个神秘的问题呢?

回答

3

的问题是,您要关闭连接:

if (dbPos.connOpen()) 
{ 
    // inserts one row, works fine because data is present in db 
    dbPos.checkOut(prijs, wie); 

    // This *starts* the work, but doesn't block 
    worker.RunWorkerAsync(); // inserts many rows   
} 
// This happens while the background work is still occurring 
dbPos.connClose(); 

你应该移动dbPos.connOpen()connClose()调用到BackgroundWorkerDoWork处理程序。这将允许连接在工作时保持打开状态。

+0

谢谢你,先生。在我的第一个插入方法中,我打开并关闭了我的连接。然后对于我在'DoWork'处理程序中打开和关闭的许多插入。很棒! – DeMama