2016-04-08 89 views
0

這發生在今天,這是最奇怪的事情。奇怪的行爲與SQL查詢

我正在使用實體框架+ LINQ插入數據庫值。有一個日期時間專欄,它一直工作到2016/04/01。

今天,當我插入一些行,並試圖將其選中:

Where BulletingDate = Convert(DateTime, '2016-03-01 00:00:00') 

這工作,但不知何故,現在當我試圖用這個插入值:

a.BulletingDate = DateTime.Parse(txtBulletinDate.Text); 
entities.Auctions.Add(a); 
entities.SaveChanges(); 

它添加了日期時間如:2016-01-04 00:00:00.000

但是公告日期文本是:2016-04-01 00:00:00

我似乎無法弄清楚。

請幫忙。

+2

如果你有一個值的格式,我建議你明確地使用'DateTime.Pars這種格式eExact' ... –

+2

這可能是服務器和應用程序使用不同的區域設置。正如Jon所說的那樣,您應該始終注意日期時間,特別是在分佈式應用程序上。 –

回答

1

日期格式非常脆弱;對於您認爲運行YYYY-MM-DD的查詢很容易突然開始執行YYYY-DD-MM或類似於登錄到終端的其他用戶那樣輕微的事情。

不要依賴傳遞到數據庫中的日期,因爲正如你所期望的那樣解析字符串。通過它們作爲日期對象,你會得到更好的結果。

0

Bouild您的DateTime對象這樣

的DateTime X =新的日期時間(2016,01,04); //年月日

所以你不要有問題,把它傳遞給實體框架時

如果你的字符串是這樣的格式「20140104 00:00:00」,你應該也是安全的(至少MSSQL沒有這個格式的問題,不知道如果C#也很酷)