【发布时间】:2011-02-18 06:47:29
【问题描述】:
我们正在使用以下代码生成 SQL 代码来查询 firebird 数据库;
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”,查询将成功执行。
是否可以将日期时间转换为正在执行的字符串?
我还应该提到我们正在使用 NHibernate 作为这个项目的 ORM。
【问题讨论】:
-
那是 Ayende 的分析器吗?它试图告诉你这实际上是一个参数 - @p1 / @p2 - 所以它真的归结为:@p1 / @p2 是如何声明的?作为 [n][var] 字符?还是日期时间?
-
是的,SQL 输出来自分析器。您是否暗示该问题可能与 NHibernate 创建参数有关?
-
Daniel ...因为经过调查,我假设问题与数据库无关,而是与表达式生成的 SQL 有关。我犯罪了吗?
-
我同意...我们可以关闭它(删除它)还是将其指向上一个问题。我是个新手!
标签: c# .net linq nhibernate firebird