SQL-запрос отлично работает в SMS, но не при выполнении из ORM, ошибка преобразования DateTime

У меня есть следующий запрос в C# с помощью FluentData ОРМ.

List<dynamic> results = 
   Context().Sql(@"SELECT DISTINCT
                      a.EnteredDate,
                      bb.PK_EmployeeName,
                      bb.EmployeeId,
                      bb.EmployeeName,
                      dd.PK_EquipmentName,
                      dd.EquipmentId,
                      dd.EquipmentName
                   FROM 
                      dbo.PIT_Inspection a
                   INNER JOIN 
                      dbo.PIT_EmployeeName bb ON a.FK_EmployeeName = bb.PK_EmployeeName
                   INNER JOIN 
                      dbo.PIT_EquipmentName dd ON a.FK_EquipmentName = dd.PK_EquipmentName
                   WHERE 
                      CAST(a.EnteredDate AS DATE) BETWEEN '@0' AND @1'", 
                  fromDate, toDate ).QueryMany<dynamic>();

Параметры fromDate а также toDate являются strings и приехать со следующим:

  • fromDate = "20150224"
  • toDate = "20150227"

Область, которая, кажется, доставляет мне проблемы:

WHERE CAST(a.EnteredDate AS DATE) BETWEEN '@0' AND '@1'", 
   fromDate , toDate

Я получаю ошибку

Ошибка преобразования при преобразовании даты и / или времени из строки символов

Вышеуказанная строка, a.EnteredDate имеет тип DateTime, Запрос, который я выполняю, если скопирован в SQL Server Management Studio, работает нормально. Я дважды проверил, что мой параметр действительно вводит правильные данные в виде строки.

Любая идея о том, что вызывает эту ошибку?

1 ответ

Решение

Большинство ORM преобразуют @ параметры в объекты SqlParameter, которые обрабатывают ввод текста для вас, поэтому вам не нужно заключать переменные запроса в апострофы для обозначения строки.

Так что меняй

'@0' AND @1'

в

@0 AND @1

Это, вероятно, относится к FluentData и определенно относится к PetaPoco и EntityFramework.

Другие вопросы по тегам