NHibernate标准日期时间格式问题

时间:2009-11-13 10:40:39

标签: asp.net sql nhibernate datetime hql

我有一个简单的nHibernate条件查询,它正在查找日期时间小于今天的记录:

example:

criteria.Add(Expression.Le("TheDate", DateTime.Today));

然而,当日/月不明确时(例如,2009年11月12日返回2009年12月11日的记录),我得到的结果是不正确的

我查看了生成的SQL,日期时间格式将显示12/11/2009,如果我直接在SQL Manager中运行sql查询,它将只返回日期格式为11/12/2009的正确结果。

有没有办法从条件表达式定义SQL日期格式,还是需要对数据库表执行某些操作?

非常感谢

2 个答案:

答案 0 :(得分:0)

NHibenrate中没有与日期格式和区域设置相关的特定设置。问题出在DB上。在我的系统中,没有任何特定设置,我从我的NHibernate查询中获取日期为@ p2 ='2009-11-13 12:48:22:000'。这是在yyyy-mm-dd中,我没有从我的代码中以这种方式发送日期,也没有指示NHibernate明确地这样做。

这发生在数据库中,它与SQL Server的实例默认语言和/或NHibenrate的数据库连接正在使用的用户帐户的语言设置有关。我相信它也可能与操作系统的日期格式设置以及SQL Server实例的默认语言有关。

在SQL Server Management Studio中,您可以右键单击实例以从“属性”对话框的“高级设置”选项卡更改/修复语言。您还必须更改/修复NHibernate正在使用的用户帐户使用的默认语言(从连接字符串中获取)。在您的服务器实例上展开Security-> Logins并右键单击正确的登录以弹出Properties对话框。在常规选项卡中,您可以设置“默认语言”设置。

之前我遇到过这个问题并在SQL Server中设置语言为“英国英语”解决了这个问题(我位于英国)。你的情况可能类似于我用这种方式解决的问题。

答案 1 :(得分:0)

非常感谢您的回复,我认为它可能类似于位置设置。

我实际上使用HQL解决了这个问题,但我会牢记这一点。