Доступ к базе данных каждый час С# [закрыт]

У меня проблема, я пытаюсь создать службу для подключения к созданному мной API.

Этот сервис должен подключаться к базе данных в Mysql каждый час и проверять, есть ли определенное значение.

Например, каждый раз я буду видеть, имеет ли поле x значение y. Если это правда, придется что-то запускать.

Я уже кое-что читал о Threads и System.Threading.Timer, но не совсем понимаю, может ли кто-нибудь дать мне практический пример или правильный способ сделать то, что я ищу, пожалуйста?

Заранее спасибо ..


person Marco Palma    schedule 29.04.2013    source источник


Ответы (3)


Создайте простую программу, которая делает то, что вам нужно, и запустите ее как задачу Windows, которая выполняется каждый час.

person CloudyMarble    schedule 29.04.2013
comment
Согласованный. Служба может быть излишним для этой ситуации. Задача Windows, вероятно, является лучшим подходом. - person Simon; 29.04.2013

Создайте службу Windows и задайте для нее временной интервал 1 час. Эта служба Windows будет работать всегда, но будет запускать запрос к базе данных с заданным интервалом. со службой Windows вам не нужно возиться с потоками и всем остальным.

partial class YourService : ServiceBase
{
    Timer timer = new Timer();
    ...
    ...


    public YourService()
    { 
        InitializeComponent();
    }

    /// <summary>
    /// 

    protected override void OnStart(string[] args)
    {
        timer.Interval = 1000000; /*The interval of the Windows Service Cycle set this to one hour*/
        timer.Start();
        timer.Enabled = true;
        timer.AutoReset = true;
        timer.Elapsed += new ElapsedEventHandler(OnElapseTime); /*fire the event after each cycle*/
    }

    private void OnElapseTime(object sender, ElapsedEventArgs e)
    {
         // HERE DO UR DATABASE QUERY AND ALL
    }

    ...
    ...
}
person Newton Sheikh    schedule 29.04.2013

Создайте службу Windows и переместите ее на сервер, на котором установлено приложение. Эта служба Windows будет работать 24 часа в сутки и будет выполнять ваши требования.

class Program: ServiceBase { System.Timers.Timer timer;

    static void Main(string[] args)
    {
        ServiceBase.Run(new Program());
    }
    public Program()
    {
        this.ServiceName = "DB Sync";
    }
    protected override void OnStart(string[] args)
    {
        base.OnStart(args);
        InitializeTimer();

    }

    protected override void OnStop()
    {
        base.OnStop();

    }

    protected void InitializeTimer()
    {
        try
        {
            if (timer == null)
            {
                timer = new System.Timers.Timer();
                timer.Enabled = true;
                timer.AutoReset = true;
                timer.Interval = 60000 * 1;
                timer.Enabled = true;
                timer.Elapsed += timer_Elapsed;
            }

        }
        catch (Exception ex)
        {

        }
        finally
        {
        }
    }

    protected void timer_Elapsed(object source, System.Timers.ElapsedEventArgs e)
    {

        TimerTick();
        timer.Interval = 60000 * Convert.ToDouble(ConfigurationManager.AppSettings["TimerInerval"]);
    }

    private void TimerTick()
    {
        try
        {
           // Query the DB in this place.
        }
        catch (Exception ex)
        {

        }
    }
}
person Kirubhananth Chellam    schedule 29.04.2013