我有一种方法可以将数据插入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();
}
那我怎么能解决这个神秘的问题呢?
答案 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}}处理程序中。这将允许连接在工作发生时保持打开状态。