2011-06-06 18 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

嘗試使用池對象。另外根據你的描述,你試圖在一個未封閉的連接對象上打開一個連接。

相關問題