Похоже, вы ответили на свой вопрос:
TimeSpan result = dt2 - dt1;
Чтобы вычесть два значения DateTime
в C #, вы просто используете оператор вычитания.Если с примером кода, который вы опубликовали, что-то не так, вы должны описать ошибку и то, что вы ожидали.
Изменить в ответ на комментарий
Это исключение не имеет ничего общего с вычитая даты, это как-то связано с вашим преобразованием из типа string в тип DateTime .Вы пытаетесь проанализировать строку в DateTime:
DateTime dt1 = DateTime.Parse(q3);
Это не удалось, поскольку q3
не представляет допустимую строку.Причина в том, что вы ( не ) запрашиваете:
string q3=command1.ExecuteNonQuery().ToString();
ExecuteNonQuery
не возвращает результаты запроса, авозвращает количество измененных строк .Другими словами, ExecuteNonQuery
предназначен не для запросов, а для сценариев обновления и т. Д.
Возможно, вы захотите использовать ExecuteScalar
, который возвращает единственное значение иззапрос.Если типы в БД верны, он вернется как DateTime
, поэтому вам не нужно выполнять часть DateTime.Parse
.Соответствующими частями вашего кода станут:
DateTime q3 = (DateTime)command1.ExecuteScalar();
DateTime q4 = (DateTime)command2.ExecuteScalar();
TimeSpan result = q4-q3;
Да, и кстати, пожалуйста, посмотрите термины "SQL-инъекция" и "параметризованные запросы" в Google.