我们使用下面的代码来生成SQL代码来查询一个firebird数据库;C#LINQ查询日期时间文字生成
DSRCash.GetAll(x => x.Account.ID == Account.ID
&& x.Date_Record <= dateTO
&& x.Date_Record >= dateFROM).ToList();
dateTO和dateFROM参数都是不可空的DateTime,这对于它们各自的数据库列是相同的。
SQL where子句生成如下;
where (struct_cas0_.DELETED IS NULL)
and struct_cas0_.ACCOUNT_ID = 372 /* @p0 */
and struct_cas0_.DATE_RECORD <= '2011-02-18T13:00:00.00' /* @p1 */
and struct_cas0_.DATE_RECORD >= '2010-02-17T13:00:00.00' /* @p2 */
您可以看到DateTime文字已经使用“s”或“标准可排序”格式进行格式化。看来Firebird不支持这种日期格式,如果我们从日期时间字面值中删除“T”,查询将成功执行。
是否可以将DateTime转换为正在执行的字符串?
我还应该提到,我们使用NHibernate作为此项目的ORM。
是Ayende的分析器吗?它试图告诉你,这实际上是一个参数 - @ p1/@ p2 - 所以它真的归结为:@ p1/@ p2是如何声明的? as [n] [var] char?或作为日期时间? – 2011-02-18 07:08:01