2012-05-20 82 views
2

免責聲明:我必須使用Microsoft Access數據庫,並且無法將我的應用程序連接到服務器以訂閱任何服務。在WPF應用程序中實時查看數據庫記錄

我正在使用VB.net創建一個WPF應用程序。我正在根據來自訪問數據庫的記錄填充listview,當應用程序加載時我查詢一次,並填充數據集。然後,我使用LINQ到數據集根據過濾器和內容向用戶顯示數據。

但是,訪問表在整個白天被多次修改,這意味着如果用戶沒有重新加載應用程序,用戶將會有一天的「舊數據」。有沒有辦法將訪問數據庫連接到VB.net應用程序,以便在數據庫中添加,刪除或修改記錄時引發事件?我很好,在事件處理程序需要的任何代碼..我只需要找出一種方法來觸發訪問表中的vb.net應用程序事件。

想想看我正在試圖做什麼作爲查看數據庫表的實時編輯,但在應用程序..任何幫助非常感謝,讓我知道如果你需要任何澄清 - 我只需要一個大方向我很樂意進一步研究。

我的解決方案的想法:

  • 創建毫秒的存取變更審計表
  • 創建用戶應用程序中單獨的工作線程來查詢 審覈表更改每60秒
  • 如果變化被發現它將修改受影響的數據集記錄
  • 提高數據集記錄更新事件以刷新受影響的 對象/屬性

回答

1

幾種方法來做你想做的事情,但你基本上在你的過程中是正確的。

據我所知,沒有直接的方法可以從數據庫驅動程序中獲取事件,讓您知道事情發生了變化,因此輪詢是唯一的解決方案。

  • 我的MS Access數據庫是一個Access 2010 ACCDB數據庫,您正在使用的ACE驅動程序(如果在應用程序運行的機器上沒有安裝訪問),您可以使用新的data macro triggers到將數據庫中的表的更改自動記錄到審計表中,該表會根據需要記錄更新,刪除等的新插入。
    這種方法是最好的,因爲它們發生在ACE數據庫驅動程序級別,因此它們將盡可能高效且透明。

  • 如果您使用的是舊版本的Access,那麼您將不得不自行實施審計。 Allen Browne has a good article on that。一點搜索也會帶來other solutions

  • 你也可以運行在您需要監控

在任何情況下,一些表查詢,您將需要爲你所提到的監控您的審計或數據表。
根據數據庫的負載,客戶端的數量等,您可以監控變化的頻率大於60s,您可以輕鬆地檢查幾秒鐘。

我會建議,雖然你:

  • 保持與數據庫的永久連接您的應用程序運行時:打開一個虛擬表的讀數,並且不要將其關閉,直到你關閉你的應用程序。這對任何人都沒有任何性能成本,但是它可以確保昂貴的鎖文件創建只完成一次,而不是針對您運行的每個查詢。這可以有一個巨大的性能導入。有關更多信息,請參閱this article

  • 讓您的審計表(或您的數據表)容易被監控:包括一個時間戳列,記錄創建和上次修改記錄的時間。這使得檢查更改非常快速和高效:您只需檢查最近的記錄修改日期是否與最後一次讀取的日期匹配。
    隨着Access 2010,很容易添加觸發器來做到這一點。對於舊版本,您需要在表單級別執行此操作。

0

如果您正在使用SQL Server

截至2005年SQL你可以使用​​

由於SQL Server 2008 R2中它已取代StreamInsight

其他數據庫管理系統和其他方案

Oracle

Handle changes in a middle tier and signal the client

或投票。這要求您配置時間間隔,以便您不會錯過太久的更改。

一般

當一臺服務器必須能夠將消息發送到它需要保持一個通道/插座開放給客戶時,有很多客戶這會變得非常昂貴的客戶。我會建議不要推送服務器,並嘗試進行智能輪詢。智能輪詢意味着儘可能大的時間間隔,並在服務器上進行適當的緩存,以防止相同數據多次訪問數據庫。

+0

感謝您的回覆 - 我正在使用非常非常有限的資源。我無法訪問可以託管Web服務的Web服務器,也沒有sql服務器空間。好玩嗎?我認爲它仍然可以完成,但不是一個「最佳實踐」解決方案 – kdonah3

+0

如果我知道您正在使用Access ...中間層不一定是一個Web服務器,所有應用程序連接到的任何層都可以充當事件的發佈者 –

相關問題