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();
}
那么我该如何解决这个神秘的问题呢
问题是你正在关闭连接:
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
的DoWork
处理程序中。这将允许连接在工作进行时保持打开状态。