Сравнение Datetime SQL server и asp.net

#c# #sql #asp.net #sql-server #ado.net

#c# #sql #asp.net #sql-сервер #ado.net

Вопрос:

Я создаю функцию, которая отменяет заказ, только если он выполняется в течение 60 минут, мне было предложено сравнить значение datetime заказа с текущим datetime.

         using (SqlConnection con = new SqlConnection(Helper.GetCon()))
        {
            con.Open();
            string query = @"SELECT * from [Order] where orderid = @id";
            using (SqlCommand cmd = new SqlCommand(query, con))
            {
                cmd.Parameters.AddWithValue("@id", id);
                using (SqlDataReader data = cmd.ExecuteReader())
                {
                    DataTable dt = new DataTable();
                    dt.Load(data);
                    foreach (DataRow dr in dt.Rows)
                    {
                        var supplier = new Supplier();
                        supplier.OrderDate = DateTime.Parse(dr["OrderDate"].ToString());
                    }
                }
            }
            return View();
  

До сих пор я брал только datetime из базы данных, мне было интересно, как вы можете получить текущее datetime и получить разницу, скажем, в минутах или часах, чтобы я мог создать условный оператор, разрешающий или не разрешающий отмену заказа. Я довольно новичок в этом, и любая помощь была бы оценена!
Спасибо!

Комментарии:

1. Вы хотите отфильтровать эти данные в SQL Server или в своем приложении (используя C #)?

2. Я бы предпочел сделать это в своем приложении на данный момент

3. Смотрите msdn : learn.microsoft.com/en-us/sql/t-sql/functions /…

Ответ №1:

Используйте DateDiff, сравнивая выбранный столбец даты с now и используя разницу в МИНУТУ:

 SELECT DATEDIFF(MINUTE, OrderDate , getdate()) AS MinuteDiff from [Order] where orderid =123
  

Ответ №2:

Если вы должны сделать это в приложении, а не в SQL-запросе, вы можете сделать что-то вроде:

 var timeSinceOrder = DateTime.Now - supplier.OrderDate;

if(timeSinceOrder < TimeSpan.FromHours(1))
{
    //do stuff here
}
  

Дата и время.Теперь получает текущее время. Вычитание даты заказа из текущего времени возвращает временной интервал, который затем можно сравнить с другим временным интервалом, в данном случае созданным функцией Timespan.Через несколько часов.

Комментарии:

1. Привет, @Andrew! Спасибо за помощь. Я попробовал код, и он сработал безупречно. Приветствия!

Ответ №3:

Вы также можете использовать DateTime.Метод сравнения. Что-то вроде

 If(DateTime.Compare(supplier.OrderDate, DateTime.Now) < 60)
{  
   //Enable Cancel/Delete Order
}