Ошибка с Datatable.select и DateTime - PullRequest
0 голосов
/ 17 мая 2018

У меня есть Datatable со столбцом "Datum", равным typeof(DateTime).

. Я хочу выбрать все строки за текущий месяц:

DataRow[] foundRows = dt.Select("Datum >='" + new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1) + "' AND Datum <='" + new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)) + "'");

I'mполучение ошибки

Невозможно выполнить операцию '<=' для System.String и System.DateTime </p>

Если я разделю оператор выбора, первый из них работает нормально,второй получить ту же ошибку:

Выберите 1 работает: DataRow[] foundRows1 = dsLinie.Tables[0].Select("Datum >='" + new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1) + "'");

Выберите 2 получить ошибку: DataRow[] foundRows2 = dsLinie.Tables[0].Select("Datum <='" + new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)) + "'");

Почему я получаю ошибку, оба выберитеоператоры запрашивают тот же DateTime столбец "Datum"?

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Так что я понял это.Я попытался со вторым выбором и вставил дневное руководство:

DataRow[] foundRows2 = dsLinie.Tables[0].Select("Datum <='" + new DateTime(DateTime.Now.Year, DateTime.Now.Month,1)) + "'");

Это работает, пока день не станет больше 12. Так что это должно быть что-то с форматом даты между c # и sql.Нашел этот ответ для моей проблемы:

Использование стандартного формата даты и времени "s" также обеспечит совместимость с интернационализацией (ММ / дд в сравнении с дд / ММ):

myDateTime.ToString("s");

=> 2013-12-31T00: 00: 00

Полный рабочий отчет:

DataRow[] foundRows = dt.Select("Datum >='" + new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString("s") + "' AND Datum <='" + new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)).ToString("s") + "'");

0 голосов
/ 17 мая 2018

Я не знаю, почему первый работает, а второй нет, но вы пытались поместить даты между # AND, чтобы явным образом привести значения datetime к строке?

DataRow[] foundRows = dt.Select("Datum >=#" + new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1).ToString() + "# AND Datum <=#" + new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month)).ToString() + "#");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...