FileSystemWatcher неправильно определяет изменения

Я пытался создать приложение, которое может отображать всплывающее уведомление всякий раз, когда в базу данных добавляется новая строка. Я использовал mysql и изменил механизм по умолчанию на механизм csv, чтобы я мог использовать 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);
}

person Surya KLSV    schedule 28.12.2011    source источник
comment
Можете ли вы убедиться, что файл на диске действительно изменился? Возможно, MySQL еще не сбросил изменения.   -  person Pieter van Ginkel    schedule 28.12.2011
comment
Вы пытаетесь обнаружить изменения в базе данных, отслеживая события файловой системы. Это действительно не очень хороший подход, и я думаю, что проблема, с которой вы столкнулись, подчеркивает это.   -  person Yuck    schedule 28.12.2011
comment
На самом деле, когда я использую FLUSH TABLES в базе данных, все работает нормально ... можете ли вы сказать мне, что данные не сбрасывают изменения для добавления новых строк, пока они сбрасываются для удаления ...   -  person Surya KLSV    schedule 28.12.2011
comment
Также есть ли способ инициировать событие без использования механизма csv всякий раз, когда добавляется новая строка. Обратите внимание, что в конечном итоге мне нужно связать это с приложением .net....   -  person Surya KLSV    schedule 28.12.2011
comment
Я считаю, что для этого предназначен класс SqlDependency: msdn .microsoft.com/en-us/library/. Но я думаю, что это работает только с MSSQL.   -  person M.Babcock    schedule 28.12.2011


Ответы (1)


Я бы рекомендовал вам периодически опрашивать базу данных, чтобы проверять измененные записи.

Если ваш запрос является дорогостоящим, вы можете создать триггер AFTER INSERT или AFTER UPDATE, который вставляет в другую таблицу, а затем опрашивает эту таблицу.

Если этого все еще недостаточно, вы можете сделать это: из своего приложения запустите команду, например

SELECT "WaitForChanges", SLEEP(999);

Создайте триггер, который убивает этот выбор с помощью команды KILL QUERY: Как это сделать из хранимой процедуры.

person Dark Falcon    schedule 28.12.2011