我有一个GUI,其中显示的信息的不同部分是从数据库中提取的。为了使GUI不冻结,我尝试将数据库查询放在BackgroundWorkers中。因为它们以异步方式访问数据库,所以我得到一个异常,告诉我数据库连接已经打开并被另一个人使用。
是否可以为数据库访问创建队列?
我已经研究过Task和ContinueWith,但是因为我对.Net framework 3.5进行了编码,所以这不是一个选项。
答案 0 :(得分:4)
您使用的数据库引擎是什么?大多数现代数据库都针对并发操作进行了优化,因此无需排队任何内容。
你经常犯的错误是在不同的线程中重用相同的IDbConnection
实例。这是一个禁忌:每个线程必须有自己的实例。
答案 1 :(得分:1)
我认为您的问题在于您获得与数据库的连接。如果要激发单独的查询,可以对单独的请求使用单独的连接。如果启用连接池,则不会增加大量开销。
答案 2 :(得分:0)
尝试使用池对象。另外,根据您的描述,您尝试在未关闭的连接对象上打开连接。