2012-04-07 54 views
4

我正在開發將由工人的小團隊可以使用(最多15個)和它ACCDB文件訪問存儲數據的應用程序。當我在一臺機器上自己測試應用程序時,我沒有任何問題,但是當至少有兩個人連接到數據庫時,應用程序會向用戶發出奇怪的錯誤。數據庫存儲在網絡上的共享文件夾中,每個用戶的應用程序訪問該文件夾以打開數據庫文件。每個用戶在數據庫的機器上都有自己的系統帳戶,並且代碼中的每個函數都可以從其他線程訪問數據庫,因此一次只能嘗試一次連接嘗試。每個連接都在同一個功能中關閉。所有的數據庫函數都被寫入一個單例類。C#/ MS訪問:數據庫連接錯誤

的錯誤,我得到:

System.Data.OleDb.OleDbException (0x80004005): Could not use 'D:\Shared\nscm\nscm_db.accdb'; file already in use. 

System.Data.OleDb.OleDbException (0x80004005): Cannot open database ''. It may not be a database that your application recognizes, or the file may be corrupt. 

System.Data.OleDb.OleDbException (0x80004005): Too many active users. **(this error even when there's only two users!)** 

這是推動我瘋了。 JET4/ACE引擎的問題是它們不能正確支持多用戶訪問?

我在考慮改變DATABSE不同,如MS SQL Server Express的或MySQL的東西,但我不知道哪一個是最容易遷移到,哪些是真正的自由。

預先感謝您的幫助和關注!

UPDATE: 數據皈依是不是我的問題。該應用程序仍在開發中,因此沒有真實的數據。我更擔心代碼和SQL查詢中的更改。而且我不確定切換到其他數據庫技術後是否會遇到其他問題。我現在的問題是:如果我一直在努力糾正目前技術中的某些問題,我正在使用Access數據庫引擎還是有一個已知的問題,並且在這個上浪費時間是毫無價值的,它會變得更簡單,開始使用某種數據庫服務器(MySQL)更快?

+0

您是否打開了ms訪問GUI並保持alter table頁打開? – nawfal 2012-04-08 18:07:30

回答

3

您在這裏如履薄冰。 MSAccess應該支持您的用戶羣,但是您可以考慮遷移到不同類型的數據庫。我的意思是,不是基於文件的數據庫,而是客戶端服務器。畢竟,如果你現在有15個用戶,那麼有可能(希望)這個數字會增長,並且基於文件的數據庫的問題將成倍增長。

如果您選擇遷移,我可以說,這兩個SQLServer的快遞和MySQL都是免費的。
就你而言,我推薦SQL Server Express。它的T-SQL語法與JET-SQL更加兼容,但是如果在查詢語法中使用VBA關鍵字,則會出現一些差異。
從視圖代碼點我reccommend放棄OleDbProvider並開始使用使用Sql Server的本地供應商。因此,您需要在等效的SqlConnection,SqlCommand中更改每個OleDbConnection,OleDbCommand等(如果您選擇MySql,也是如此)。這些變化是相當機械和重複的,所以這裏沒有大問題。然而,你應該重新測試,你有充分的數據訪問查詢在你的代碼,以確保相同的結果返回

關於錯誤:

  • Too many active users - 這可以通過連接來發起不 關閉正確
  • Cannot open database - 數據庫損壞或您已達到2GB限制?
  • Could not use - 檢查所有 用戶退出應用程序後是否刪除LDB文件。再次,這可能是 在您的應用程序中出現問題的一種症狀
+0

** 1。**我只是在每個函數中使用'connection.Close()'。我應該做更多的事嗎? ** 2。**我沒有達到2GB。該應用程序尚未使用,只是測試,因此該數據庫只包含一些大約12MB的測試數據。 ** 3。**我以爲db引擎自己管理LDB文件。是的,在所有用戶關閉應用程序一段時間後,它會被刪除 – Val 2012-04-07 22:13:26

+1

通常我不使用close,我更喜歡使用'using'語句,如果遇到異常,也會保證關閉連接。正如我所說的,你的用戶羣是MSAccess數據庫的可能性,但仔細檢查你擁有的每一個數據訪問,一定要嘗試......抓住所有東西或在你的一次性對象上使用'using'。 – Steve 2012-04-07 22:25:02

+0

我正在更改代碼以添加'using'語句。這可能需要幾天時間。我會測試它然後看它是如何工作的。 – Val 2012-04-09 21:48:08