2009-11-13 94 views
0

我有一个简单的NHibernate的条件查询其与日期时间寻找记录比今天少:NHibernate的标准日期时间格式问题

example: 

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

但是,我得到的结果是不正确的时候,天/月的暧昧(例如2009年11月12日返回2009年12月11日的记录)

我看过生成的SQL,datetime格式将显示12/11/2009,如果我直接在SQL管理器中运行sql查询,它将只以日期格式11/12/2009返回正确的结果。

有没有从标准表达式定义SQL日期格式的方法,还是我需要对数据库表做些什么?

非常感谢

+0

您可以发布它产生使用SQL事件探查器的SQL(如果它是SQL Server)的生产 – 2009-11-13 10:49:16

+0

NHibernate的代码(datetime列被称为时间戳): NHibernate的:SELECT TOP 1 this_.PriceFeedID为PriceFee1_2_1_,this_.Name为Name2_1_ ,示出的所有列 //移除代码// p1_.TimeStamp如TimeStamp0_0_, p1_.PriceFeedID如PriceFee7_0_0_ FROM PriceFeed THIS_内部联接PriceFeedData P1_上this_.PriceFeedID = p1_.PriceFeedID WHERE this_.Code = @ p0和p1_.TimeStamp <= @ p1 ORDER BY p1_.TimeStamp desc; @ p0 ='CODEID',@ p1 = 12/11/2009 00:00:00 – Toby 2009-11-13 11:07:10

回答

0

NHibenrate没有关于日期格式和区域设置的具体设置。问题在于数据库。在我的系统中,没有任何特定的设置,我得到了我的NHibernate查询的日期@ p2 ='2009-11-13 12:48:22:000'。这是yyyy-mm-dd,我不是通过这种方式从我的代码发送日期,也没有指示NHibernate明确地这样做。

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

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

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

0

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

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