2011-12-28 80 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