我使用FluentData
ORM在C#中进行了以下查询。
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,它运行正常。我仔细检查了我的参数确实带来了正确的数据,如字符串。
有关导致此错误的原因的任何想法?
答案 0 :(得分:2)
大多数ORM将@参数转换为SqlParameter对象,这些对象为您处理输入,因此您不需要将查询变量括在撇号中来表示字符串。
所以改变
'@0' AND @1'
到
@0 AND @1
这可能适用于FluentData,绝对适用于PetaPoco和EntityFramework。