#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
}