2008-11-14 50 views
3

我們有一個主要的使用MS Access的VB6交易應用程序(別問!)它總是將交易放到MS Access數據庫中。只讀訪問數據源

這裏的基礎架構的其他部分已經大幅度地移動了,我想定期讀取此Access數據庫並將任何新的交易複製到SQL服務器數據庫中。

執行此操作所需的SQL和C#非常簡單。

但我想確保我這樣做,不鎖定Access數據庫或導致VB6應用程序的問題。換句話說,當從Access中填充DataTable時,我不想鎖定數據庫並阻止VB6應用程序寫入數據庫。我似乎記得從舊的ADO中可以找到可用於此目的的共享模式。

我應該從.NET使用什麼樣的連接字符串來完成此操作?

回答

0

只是一個想法...但你有沒有想過升級數據庫,以便表本身實際上存儲在SQL Server和Access只是成爲前端?已經有一段時間了,但如果我沒有記錯,Access應該有一個嚮導(yuck!)來幫助你做到這一點。

隨着老ADO您可以將光標或鎖定類型機構設置爲以下之一:

遊標類型

adOpenForwardOnly這種類型的遊標只能用來前移通過記錄集。該選項用於填充列表框或組合框。

adOpenKeyset這是光標的時候,我們預計會有大量的記錄,因爲我們沒有被告知更改時,可以影響我們記錄的數據進行了使用的最佳類型。

adOpenDynamic此遊標可以讓我們看到影響我們記錄的其他用戶所做的所有更改。它是最強大的光標類型,但是最慢的一種。

adOpenStatic當我們有一個小的記錄集時,靜態遊標很有用。

鎖類型

ADLOCKREADONLY時,沒有添加,更新或刪除從記錄允許使用這種鎖模式

adLockPesimistic在保守式鎖定,記錄被鎖定一旦編輯開始並保持鎖定狀態直到編輯完成。

ADLOCKOPTIMISTIC當更新方法被調用記錄發生這種情況。該記錄被解鎖即使在編輯但當更改保存到數據庫

ADLOCKBATCHOPTIMISTIC該選項允許我們執行的時候,我們正在更新一批記錄

不知道樂觀鎖被暫時鎖定這究竟是如何轉化爲.NET世界......但也許這可以讓你指出正確的方向。

+0

我很想將它更新到SQL Server,但不幸的是,這不取決於我。這些人有一個'它的工作誰在乎'的態度 – rc1 2008-11-14 15:58:57

+0

是的,Access確實有一個升遷嚮導......這是可以忍受的,但如果可行的話,你仍然必須自己修復表格。 – 2008-11-14 16:02:21

+0

更新這個應用程序將需要比升級的嚮導更多...目前有更多的優先事項。這就是人生! – rc1 2008-11-14 16:03:29

1

要建立在馬特的答案,我會建議adOpenForwardOnly和ADLOCKREADONLY的組合:ForwardOnly,因爲你只需要插入這些交易到SQL Server,和只讀,所以你不鎖定其他進程(還有什麼會打這些表?)。幸運的是,這些是默認選項。 :)

0

您有多種解決方案,例如通過ADO(OLEDB)連接打開只讀記錄集。這些記錄集甚至可以本地保存/存檔爲xml文件以供進一步使用。

但最簡單的解決方案是製作原始mdb文件的副本(即使某些表被鎖定,也可以隨時完成)。然後,您可以對複製的數據庫執行任何操作,而不會對運行的VB6應用程序造成干擾。