0

我最近發現了SQLite的迷人之處,特別是SQLite的.NET包裝器http://sqlite.phxsoftware.com/從SQLite接收.NET中的數據庫更新事件

現在,假設我正在開發將在同一網絡上的多臺機器上運行的軟件。沒什麼瘋狂的,大概只有5或6臺機器。並且這些軟件的每個實例都將訪問存儲在共享目錄中的文件中的SQLite數據庫(這是一個壞主意?如果是這樣,告訴我!)。

如果有一個實例更新數據庫文件,是否有方法可以通知應用程序的每個實例?一個顯而易見的方法是使用FileSystemWatcher類,將整個數據庫讀入一個DataSet,然後......你知道......列舉整個事情來看看有什麼新東西......但是,看起來很愚蠢,其實。作爲SQLite更新的提供者是否有這樣的事情?

這甚至有意義作爲一個問題嗎?當談到ADO.NET時,我也是一個新手,所以我可能從完全錯誤的角度來處理這個問題。

回答

3

跨網絡使用SQLite不是一個好主意。看看這個here SQLite自己的建議。

客戶端 - 服務器數據庫將更可靠,也可能解決您的通知問題。例如,PostgreSQL具有通過NOTIFY和LISTEN語句的客戶端間信令機制,可以直接從客戶端或從函數,片斷或觸發器中使用。

即使您決定使用SQLite,也不要使用文件監控API。由於文件系統深處的競爭條件,它們在Windows上完全崩潰。從MSDN條目FileSystemWatcher

注意的是,當事件被遺漏或者超出緩衝區大小時,FileSystemWatcher對象不會引發錯誤事件,由於與Windows操作系統的依賴。

它提供了一些緩解這種情況的建議,但它們都沒有提供任何可靠性保證。

+0

@Marcelo:感謝您的輸入。起初,似乎SQLite提供了一種在不必安裝客戶端 - 服務器數據庫的情況下在進程間共享數據的好方法。現在看起來這是真正做到這一點的唯一方法。我很可能在接受這個答案後很快接受了一些更多的自己。 – 2010-04-26 02:02:10