2011-12-28 79 views
0

我試圖創建一個應用程序,只要將新行添加到數據庫,就可以彈出通知消息。我使用mysql並將默認引擎更改爲csv引擎,以便我可以使用FileSystemWatcher以檢測任何更改。當一個行被刪除時,filesystemwatcher會觸發,但是當新行被添加到數據庫時,問題是它沒有觸發已更改的事件。我還觀察到,當一行被刪除時,「修改日期」正在改變,但是當我添加一個新行不更新。請幫幫我。FileSystemWatcher沒有正確檢測到更改

private void button1_Click(object sender, EventArgs e) 
{ 
    FileSystemWatcher fsw = new FileSystemWatcher(); 
    fsw.Path = "C:\\xampp\\mysql\\data\\doubts\\"; 
    fsw.EnableRaisingEvents = true; 
    fsw.Changed += new FileSystemEventHandler(func); 
} 

private void func(Object obj,FileSystemEventArgs e) 
{ 
    notifyIcon1.Icon = SystemIcons.Application; 
    notifyIcon1.BalloonTipText = 
     "Addition of new row to the database detected..."; 
    notifyIcon1.ShowBalloonTip(4000); 
} 
+0

你可以發佈代碼嗎? – 2011-12-28 17:09:04

+0

你能證實磁盤上的文件實際上已經改變了嗎?也許MySQL還沒有完成更改。 – 2011-12-28 17:28:38

+3

您正試圖通過監視文件系統事件來檢測數據庫內的更改。這真的不是一個好方法,我認爲你遇到的麻煩突顯了這一點。 – Yuck 2011-12-28 17:41:51

回答

1

我建議您定期輪詢數據庫以檢查更改的記錄。

如果您的查詢很昂貴,您可以創建一個AFTER INSERTAFTER UPDATE觸發器,該觸發器插入到另一個表中,然後輪詢該表。

如果這仍然是不夠的,你可以這樣做:從您的應用程序,像

SELECT "WaitForChanges", SLEEP(999); 

運行一個命令來創建它通過KILL QUERY command殺死這個選擇觸發:How to do this from a stored procedure