#c#
#c#
Вопрос:
я пытаюсь отменить сохранение книги, поскольку время резервирования составляет 24 часа после ее истечения в системе автоматизации библиотеки, но оно не работает. ниже приведен код, который не работает
protected void Page_Load(object sender, EventArgs e)
{
try
{
SqlConnection con = new SqlConnection(strcon);
if (con.State == ConnectionState.Closed)
{
con.Open();
}
SqlCommand cmd = new SqlCommand("select * from book_reserve_tbl;", con);
SqlDataReader dr = cmd.ExecuteReader();
if (dr.HasRows)
{
string todate_str;
DateTime reserve_todate, current_datetime;
current_datetime = DateTime.Now;
string book_id;
while (dr.Read())
{
todate_str = dr.GetValue(4).ToString(); ;//this will assign the reserveToDate col value
String is_reserve = dr.GetValue(5).ToString();
reserve_todate = Convert.ToDateTime(todate_str);
if (reserve_todate < current_datetime amp;amp; is_reserve == "YES" )
{
Response.Write("<script>condition true</script>");
book_id = dr.GetValue(1).ToString();
UpdateCurrentStock(book_id);
UpdateBookReservation(book_id);
}
}
con.Close();
}
}
catch (Exception ex)
{
Response.Write("<script>alert('" ex.Message "');</script>");
}
}
пожалуйста, помогите, поскольку у меня нет опыта в этом
С уважением
Комментарии:
1. Тааак… В чем собственно проблема? кроме того, всегда лучше хранить datetime как фактическую конструкцию даты и времени в базе данных, а не как строку (если в вашей базе данных есть такие возможности)
2. Возможно, вы захотите указать, каким образом это не работает, предпочтительно с некоторыми примерами входных данных и наблюдаемого поведения по сравнению с ожидаемым поведением — это значительно упростило бы помощь
3. Единственное, что пока приходит на ум, — это часовой пояс.. убедитесь, что вы сравниваете время в пределах одного и того же часового пояса, и если нет, то вам нужно, чтобы ваша
current_datetime
переменная соответствовала часовому поясу поля базы данных, выполнивDateTime.UtcNow.AddHours(x)
wherex
— смещение для необходимого часового пояса (еще лучше, сохраните поле даты DB как UTC и просто используйтеDateTime.UtcNow
). Но, как говорили другие, вопрос требует более подробной информации, прежде чем мы сможем предложить что-либо, кроме предположения.
Ответ №1:
Если вы хотите рассчитать время между двумя значениями даты и времени, вам следует использовать TimeSpan:
TimeSpan elapsed;
DateTime time1;
DateTime time2;
elapsed = time1.Subtract(time2);
//or with DateTime.Now
elapsed = DateTime.Now.Subtract(time1);
Никогда не используйте string для хранения значений DateTime!
Комментарии:
1. спасибо всем за резервную книгу repl.user только на 24 часа, и через 24 часа срок ее резервирования должен быть истек / отменен. теперь в sql srver у меня есть поле с типом данных DateTime, а не просто string . теперь, когда я сравниваю дату и время в моем данном коде, это не работает. может быть одна из причин, по которой формат переменной current_datetime равен 24/09/2020 12:52:40 вечера, а какое хранилище в базе данных — 2020-09-24 12:52:40.000 теперь, если формат не тот, может возникнуть проблема, но как я могу сохранить дату и время в базе данных sql server в следующем формате 24/09/2020 12:52:40. пожалуйста, помогите
2.Довольно уверен
if (reserve_todate < current_datetime amp;amp; is_reserve == "YES" )
, что это правильно. оба<
и==
имеют более высокий приоритет оператора, чемamp;amp;
поэтому круглые скобки не нужны3. @brads3290: спасибо, вы правы! извините за неверную информацию! Я исправил свой ответ
4. @brads. да, я не использовал никаких парантез.
5. @ brads3290. я отобразил как текущую дату и время, так и сохраненную в базе данных. их формат практически одинаков . тогда почему условие не выполняется / true. я увеличил системную дату на 3 дня, а затем условие должно быть выполнено, но это не так