2013-06-20 116 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