BackgroundWorker与MySql不能正常工作

本文关键字:工作 常工作 MySql 不能 BackgroundWorker | 更新日期: 2023-09-27 18:19:19

我有一个方法插入数据到for loop内的MySql数据库。

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

所以我想试着把它放在一个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();
}

那么我该如何解决这个神秘的问题呢

BackgroundWorker与MySql不能正常工作

问题是你正在关闭连接:

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处理程序中。这将允许连接在工作进行时保持打开状态。