Ошибка приведения - преобразование строк во времена - PullRequest
1 голос
/ 26 января 2012

В моем приложении есть сетка данных, которая заполняется информацией из базы данных SQLserver. Среди прочего данные, которые заполняют сетку, включают времена. Теперь я некоторое время боролся за то, чтобы данные из БД выглядели так, как я хотел. В конце концов, мой sql comman включил следующее: -

LEFT(CONVERT(VARCHAR(8), te.StartTime, 8), 5) AS [Start Time], 
LEFT(CONVERT(VARCHAR(8), te.FinishTime, 8), 5) AS [Finish Time]

Который хорошо показывает время в формате 8:00 и 10:00 и т. Д. Однако это позже вызывает проблему в моем приложении, когда мне нужно использовать информацию в сетке данных для вычисления разницы между двумя значениями. Это потому, что (я полагаю) моя команда SQL (выше) покрыла время для строк. Поэтому, когда я пытаюсь, например, следующее:

DateTime startTime = (DateTime)varValue;
DateTime endTime = (DateTime)varFinish; 

Я получаю сообщение об ошибке «Неверное приведение». Поэтому я столкнулся с преобразованием этих строк обратно в DateTime для выполнения любых вычислений с ними. Я не могу просто добавить исходные поля времени в команду SQL, потому что иногда время в сетке будет новым временем, введенным пользователем, поэтому в любом случае это будут строки.

Как мне лучше всего преобразовать пользовательский ввод, например «8:00» в дату-время - так что я могу выполнять такие функции, как вычисление разницы между двумя разами. Или, в качестве альтернативы, если я расскажу о проблеме с расписанием по-другому.

Любой совет будет с благодарностью. Я довольно новичок в C #, как вы уже догадались.

Ответы [ 3 ]

3 голосов
/ 26 января 2012

Вы пробовали это?

DateTime tmp = DateTime.Now;
DateTime startTime = DateTime.Parse(varValue + " " + tmp.ToShortDateString());
DateTime endTime = DateTime.Parse(varFinish + " " + tmp.ToShortDateString()); 

Думаешь, это решит твою проблему? Теперь у вас есть текущая дата с указанным вами временем в двух параметрах

2 голосов
/ 26 января 2012

Я советую вам взять переменные даты и времени без преобразования в SQL и преобразовать их так, как вы хотите в C #.Вы можете использовать следующее:

DateTime d = FetchTimeFromDB(); 
string timeRequired = d.ToString("hh:mm");
1 голос
/ 26 января 2012

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

Вы всегда должны пытаться отделить свои прикладные уровни и изолировать обязанности.

Ваш запрос к базе данных должен просто возвращать информацию о дате / времени в необработанном формате. Отображение значения особым образом - это специфическое для пользовательского интерфейса требование, которое в .NET можно решить с помощью функций форматирования (например, ToShortTimeString для объекта DateTime).

DateTime t = <date/time form database query>
t.ToShortTimeString();  // or t.ToString("hh:mm");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...