2012-10-24 140 views
3

我想做一個C#日期時間和SQL日期時間之間的平等比較,由於存儲這些值的精度,這似乎失敗。C#日期時間和SQL日期時間之間的平等比較失敗

所以說我有一個非常簡單的SQL表,與這些領域:

ID (PK, int, not null) - identity 
Title (text, null) 
UpdateTime (datetime, not null) 

我創建通過實體框架類對象,並設置其錄入到DateTime.Now像這樣:

DateTime now = DateTime.Now; 
Title.UpdateTime = now; 

當我將新對象插入表格時,我發現所有值似乎都正確存儲。現在我想要爲我的對象創建的ID。

這是事情得到borked的地方。我試着通過LINQ拉回來ID:

Title.ID = context.DBTitles.Where(x=>x.UpdateTime == now).FirstOrDefault().ID; 

這將引發異常,因爲該查詢返回null,儘管在「現在」我已經插入的事實是假想相同插入的「現在」進入我的桌子。

所以我的問題:我如何確保我的C#datetime等同於存儲在SQL中的日期時間?什麼是最好的方式讓我的身份證回來?

+0

哪個RDBMS? SQL Server 2008? –

+0

是的,2008對不起,沒有指定。 – MadHenchbot

回答

3

如果你正在使用Linq,你插入的對象是否會在提交時得到分配給它的ID?你不需要「回憶」它。

+0

它似乎沒有自動回來。 (也許我錯過了一個步驟?)ID進入時爲0,在我的context.SaveChanges()調用後爲0。 – MadHenchbot

+0

context.SubmitChanges(); ? – Haedrian

+0

Egads,你是對的。在檢查ID之前,我讓DB對象超出了範圍......感謝您和+1,以找到我的問題的真正根源。 – MadHenchbot

6

如果您正在使用SQL Server,請改爲使用DateTime2。它具有與.NET類型相同的精度。

+0

謝謝!事實證明,我不需要再次查詢表來檢索我的ID,但這些信息非常有幫助。如果可以的話,我會將它們標記爲答案。 – MadHenchbot

+0

謝謝,馬格努斯。這爲我做了詭計。在我的情況下,我用批量日期填充名爲LastUpdated的傳統DateTime字段,然後在批處理後查詢所有與批日期不匹配的記錄,以便我可以填寫單獨的DeletedOn列。等於(或不等於)的比較總是在下降。按照你的建議更改列類型,現在我就像Flynn一樣。 =) –