2009-11-13 76 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來解決問題,但我會牢記這一點。