2011-06-06 52 views
1

我有一个GUI,其中显示的信息的不同部分是从数据库中提取的。为了让GUI不冻结,我试着将数据库查询放在BackgroundWorkers中。由于这些数据库异步访问数据库,我得到一个异常告诉我数据库连接已经打开并被另一个使用。如何对数据库访问进行排队?

是否可以为数据库访问创建队列?

我已经看过任务和ContinueWith,但因为我的代码对.Net框架3.5这不是一个选项。

+0

你可以显示/告诉我们你正在使用哪个数据库以及你的数据层是怎样的?通常数据库已经自行处理并发。 – 2011-06-06 09:42:58

回答

4

什么是您正在使用的数据库引擎?大多数现代数据库都针对并发操作进行了优化,因此不需要排队。

你表现出错的东西是跨不同线程重复使用相同的IDbConnection实例。这是一个禁忌:每个线程都必须有自己的实例。

+0

现在我正在使用Access数据库进行测试,但系统将建立在MySQL数据库上。但是你是对的我使用了相同的IDbConnection,所以我会尝试为每个查询使用一个新的连接。 – Bildsoe 2011-06-06 09:47:43

1

我认为你的问题在于你连接到数据库的方式。如果你想发起不同的查询,你可以使用单独的连接进行单独的请求。如果启用连接池,这不会增加很多开销。

0

尝试使用池对象。另外根据你的描述,你试图在一个未封闭的连接对象上打开一个连接。

相关问题