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.