SQL Query在SMS中正常工作,但在从ORM执行时却没有,DateTime Conversion错误

时间:2015-02-19 19:49:47

标签: c# sql sql-server fluentdata

我使用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>();

参数fromDatetoDatestrings,并填充以下内容:

  • fromDate =“20150224”
  • toDate =“20150227”

似乎给我带来问题的区域是:

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

我收到错误

  

从字符串

转换日期和/或时间时转换失败

以上行a.EnteredDate的类型为DateTime。我正在执行的查询,如果复制到SQL Server Management Studio,它运行正常。我仔细检查了我的参数确实带来了正确的数据,如字符串。

有关导致此错误的原因的任何想法?

1 个答案:

答案 0 :(得分:2)

大多数ORM将@参数转换为SqlParameter对象,这些对象为您处理输入,因此您不需要将查询变量括在撇号中来表示字符串。

所以改变

'@0' AND @1'

@0 AND @1

这可能适用于FluentData,绝对适用于PetaPoco和EntityFramework。