2013-08-12 109 views
0

這是使用帶有oledb連接的共享驅動器上的.mdb數據庫在Visual Basic中編寫的。vb.net同步數據庫更新

假設我有以下2條記錄的表:

|ID |NAME  |CITY  | 
    |2 |John Smith |Dallas | 
    |15 |Bob Johnson |New York | 

由於OLEDB抄表到本地數據集,然後將其發送回DB(data.tables("Test").Rows.Add),如果2人同時添加第三排插槽中的新記錄會導致其中一個記錄丟失嗎?如果是這樣,我該如何去防止這種情況呢?

側面說明:將沒有進入編輯現有行,只添加新行。

解決方法:所以我按照建議做了,並設置了一個測試程序來循環並試圖在嘗試之間沒有緩衝時間的情況下更新數據庫100次。我有兩臺電腦同時運行它。當它試圖在同一秒內更新時,它確實導致其中一個程序丟失數據,但它也產生了一個錯誤。最後它很少發生,每次運行只產生大約3次錯誤。

正如我的計劃將主要是小規模的,我看不出我重寫整個程序MySQL和設置它的計算機上,因爲我真的只是想共享驅動器上的數據庫文件。最後,我能夠通過在catch塊中處理數據,以便在發生錯誤時重新嘗試更新,從而使其工作到沒有數據丟失的地方。不是大規模生產的解決方案,但它適用於我的目的。

+0

到底爲什麼會的記錄,一個迷路?不會他們都被添加?它在連接上工作,爲什麼有這種連接,如果這種事情發生。您應該嘗試運行同一個程序的兩個版本,並使用一個循環來繼續執行Add命令,並在兩個循環上設置一個計數器爲1000,也許像Thread.Sleep(5000)一樣添加到兩個循環中。它們可能仍然不會同時運行。嘗試將計數設置爲1000000,這可能會使它們一起運行。如果你有全部2,000,000條記錄,最後檢查。 – SSpoke

+0

即時思考可能會丟失的原因是因爲oledb將數據庫複製到本地數據表。當您更新它時,它會將本地數據表發送回數據庫。所以如果兩個人同時嘗試更新,顯然會先進行更新,但是第二個基本上只會覆蓋第一個。至少這是如何看起來。 – thatstevenguy

+0

你怎麼知道整個datatable被髮送?如果這就像你發送給它的任何SQL庫一樣,它只有在你執行一個'SELECT'命令時才發送給你,你的意思是它用你的數據庫更新你的計算機上的本地文件?這是「MS Access」嗎? – SSpoke

回答

0

首先是有原因的,爲什麼業內人士不使用Access ......簡單來說它是維基百科閱讀了狗屎數據庫。
我最好的選擇是使用MSSQL,即使通過網絡(只要您在託管數據庫的服務器的防火牆中添加了一個例外),就可以讓我更容易相信我。使用MSSQL如果你不想讓migrane頭疼,然後回到我們身邊,告訴我們它是如何發生的。相當容易設置相同的設置爲VB中的Access數據庫。
剛看到,ü發現周圍的工作,讓我們希望這是一個持久的解決辦法的東西U將在未來的項目中使用沒有問題