У меня есть 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)) + "'");
Я получаю ошибку
Cannot perform '<=' operation on System.String and System.DateTime
Если я разделю оператор выбора, первый будет работать нормально, второй получит ту же ошибку:
Выберите 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)) + "'");
Почему я получаю сообщение об ошибке, оба оператора select запрашивают один и тот же столбец DateTime "Datum"?





Я не знаю, почему первый работает, а второй нет, но пытались ли вы поставить даты между # И, чтобы явно преобразовать значения даты и времени в строку?
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() + "#");
Вот и разобрался. Я попробовал со вторым выбором и вставил дневник:
DataRow[] foundRows2 = dsLinie.Tables[0].Select("Datum <='" + new DateTime(DateTime.Now.Year, DateTime.Now.Month,1)) + "'");
Это работает до тех пор, пока день не станет больше 12. Так что это должно быть что-то с форматом даты между C# и sql. Нашел этот отвечать для моей проблемы:
Использование стандартного формата даты и времени «s» также обеспечит совместимость с интернационализацией (MM / dd по сравнению с dd / MM):
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") + "'");
Замена символа # символом одинарной кавычки подходит для меня в вашем первом примере. Оба ваших вторых примера работают без изменений.