BackgroundWorker与MySql无法正常工作

时间:2013-06-20 16:18:37

标签: c# mysql for-loop insert backgroundworker

我有一种方法可以将数据插入MySql内的for loop数据库。

插入量可能很多,因此我的程序在插入过程中会冻结。

所以我想尝试将它放在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();
}

那我怎么能解决这个神秘的问题呢?

1 个答案:

答案 0 :(得分: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()次来电转移到BackgroundWorker的{​​{1}}处理程序中。这将允许连接在工作发生时保持打开状态。