Я хочу обрезать таблицу с помощью консольного приложения с параметром час. например, я хочу запустить усечение запроса в 12.00, используя время в системе.

Это мой код в консольном приложении с использованием C #.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {            
            string getHour = DateTime.Now.ToString("h:mm:ss tt");

            if (getHour == "12:00:00 AM")
            {
                Console.WriteLine("Do action to run query truncate");
                //in this line i will execute query truncate.
            }        

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        } 
    }
}

И это не работает. пожалуйста, дайте мне решение или образец кода, чтобы исправить мою проблему. Благодарность...

c#
3
developer satu 26 Дек 2015 в 06:32

4 ответа

Лучший ответ

Я бы предложил несколько вещей по вашему коду:

  1. Не используйте сравнение string, а напрямую использует DateTime (взгляните на TimeOfDay.TotalSeconds). Таким образом, сравнение будет намного проще.
  2. Используйте повторные вызовы вместо одного вызова (если вы действительно не можете быть уверены, что запускаете свою программу точно в 12). Таким образом вы заставите свою программу работать на вас больше.
  3. Чтобы сделать его более надежным, предоставьте несколько способов повысить устойчивость вашей системы. Вот какой должна быть автоматизация.

Примере:

namespace ConsoleApplication1 {
    class Program {
        static void Main(string[] args) {

            while (true) { //read 2. assuming this is to be run forever in this example, but gives also some way to break the loop whenever necessary in your app
                if (DateTime.Now.TimeOfDay.TotalSeconds <= 1) { //read 1. and 3. this way, you give tolerance of 1 second. Your action will be run on 12:00:00 - 12:00:01
                    Console.WriteLine("Do action to run query truncate");
                    //  //in this line i will execute query truncate.
                    break; //break after saving once, for instance, and run again when the time close... This is to prevent possible multiple executions...
                }
                System.Threading.Thread.Sleep(500); //read 2. and 3. check every 500 millisecond, at least to give chance to check the time twice per second
            }

            // Keep the console window open in debug mode.
            Console.WriteLine("Press any key to exit.");
            Console.ReadKey();
        }
    }
}
1
Ian 26 Дек 2015 в 15:27

Как упоминалось в других ответах, вы не должны использовать свое приложение для планирования задачи. Похоже, вы выполняете задачу обслуживания базы данных, поэтому первое, на что я хотел бы обратить внимание, это ...

1) Посмотрите, может ли ваша база данных планировать задачи. Агент SQL Server , например, может планировать запуск хранимых процедур (или специального SQL) в заданное время и будет выполнять вашу задачу, если вы используете это для своей базы данных. Подробнее здесь.

Если ваша база данных не может этого сделать или вы хотите делать другие вещи, кроме усечения таблицы, тогда ...

2) попробуйте использовать Планировщик задач Windows .

Это может запускать приложение в заданное время, его легко настроить, а затем ваше приложение может просто выполнять работу, которую оно имеет в виду (например, обрезать таблицу), и не беспокоиться о расписании.

1
Community 23 Май 2017 в 11:59

Я чувствую, что проблема связана с потоком выполнения вашего кода. Вы вызываете код один раз, а затем он останавливается. Он проверяет один раз СЕЙЧАС и получает текущее время. Если время 12:00:00 AM, вы можете перейти к оператору if, но вам нужно будет запустить его буквально в 12:00:00 по системному времени в точке, что практически невозможно.

Вам следует рассмотреть возможность использования службы Windows или диспетчера задач Windows: Консольное приложение C # - сохраните работает.

1
Community 23 Май 2017 в 12:07

Когда вы запускаете свою программу, она быстро смотрит на часы и, если еще не ровно полночь, немедленно закрывается. (Точнее, выводит какое-то сообщение и ждет нажатия клавиши). Я думаю, вы хотите подождать до полуночи. Если точное время не так важно (я имею в виду, что несколько секунд раньше или позже приемлемо), самое простое решение:

static void Main(string[] args)
{
    Thread.Sleep(DateTime.Today.AddDays(1) - DateTime.Now);
    Console.WriteLine("It's about midnight, I go to sleep");
}
1
Tamas Hegedus 26 Дек 2015 в 03:57