2014-01-15 61 views
0

我需要在我的SQL Server數據庫中插入.net DateTime而不需要幾毫秒。使用參數在無毫秒的SQL中插入datetime

dtNow = Date.Now 
myCmd.Parameters.AddWithValue("MyDate", dtNow) 

我想在我的數據庫中的值是,例如:2014-01-15 17:18:04.000
身爲秒的更精確的值。

但它增加了實際毫秒,當我做一個插入像這樣的:

INSERT Table1 (MyDate, id, MyValue, DateModified) 
VALUES (@ADate, @ID, @Value, @MyDate) 

我怎樣才能以最簡單的方式實現這一目標?

+1

做'dtNow.AddMilliseconds( - (dtNow.Millisecond))'插入前D B。 – user2989408

+0

@ user2989408:你需要使用調用的結果 - 只要調用Add就不會改變dtNow本身。 –

回答

2

雖然你可能減去評論中建議的毫秒數,這仍然會留下亞毫秒值。那可能不會引起問題,但驅動程序可能會將亞毫秒值四捨五入到整個毫秒。它更清潔(IMO),以避免有任何亞秒值,因此您插入的值與存儲的值相同。我寧願使用:

var truncated = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day, 
          dtNow.Hour, dtNow.Minute, dtNow.Second); 
// Use truncated as the parameter in your command 

這樣,它顯然會只有具有年/月/日/時/分/秒值。

如果你發現自己經常這樣做,你可能想要寫一個擴展方法,這樣就可以使用:

var truncated = dtNow.TruncateToSecond(); 
+0

我很害怕這樣的回答。我希望在哪裏更簡單的方法。 – SysDragon

+0

嗯,當然它的工作,但不是SQL Server日期時間粒度高於一毫秒(0,3,7毫秒?) –

+1

@SysDragon:一個擴展方法,然後你打電話時,你需要 - 這似乎很簡單。 ..如果你通常使用「現在」,你可以寫一個方法來返回「當前時間被截斷到最接近的毫秒」。 –