2009-12-19 93 views
7

我在C#中有一個dateTime對象,並且我想要插入到SQL Server日期時間字段中。這是什麼正確的格式?在SQL服務器日期時間字段中格式化日期時間的正確方法是什麼

+4

您可能不應該在代碼中構建SQL字符串。相反,您應該查看使用存儲的特效,參數化查詢或ORM。任何這些都可以通過格式化來解決您的問題,因爲您只需傳遞對象,您不必執行任何字符串格式設置。 – 2009-12-19 00:51:33

回答

16

正確的方法是使用參數化查詢而不是文本格式。那麼你可以使用強類型的SqlDbType.DateTime參數。

(如果你絕對必須使用文本格式來做到這一點 - ,我強烈建議反對 - 然後像yyyyMMdd HH:mm:ss應該做的伎倆)

+0

我不會傳遞一個字符串到參數化查詢中,並有相同的問題? – leora 2009-12-19 03:58:25

+0

實際上,無論語言和區域設置如何,保證可以在任何SQL Server上工作的格式是'yyyyMMdd HH:mm:ss'(沒有破折號 - 在某些語言設置中導致麻煩) – 2009-12-19 08:00:52

+0

@marc_s:I've更新了使用安全在所有情況下格式的答案。 – LukeH 2009-12-23 00:07:13

0

使用SET DATEFORMAT

樣本took from here

 SET NOCOUNT ON 
    CREATE TABLE X(EXAMPLE INT, D SMALLDATETIME) 
    -- EXAMPLE 1 
    SET DATEFORMAT MDY 
    INSERT INTO X VALUES (1, '10/30/56') 
    -- EXAMPLE 2 
    SET DATEFORMAT YDM 
    INSERT INTO X VALUES (2, '56/31/10') 
    -- EXAMPLE 3 
    SET DATEFORMAT YMD 
    INSERT INTO X VALUES (3, '56/10/31') 
    SELECT * FROM X 
3

爲了擴大@盧克的答案,我偶然發現了這個錯誤。

yyyy-MM-dd HH:mm:ss格式有SQL Server 2005(一個例子是法國人)在區域/語言問題,而是固定在SQL 2008:

所以,不要使用以下格式:yyyy-MM-dd HH:mm:ss(空格分隔符)。

只能使用:yyyy-MM-ddTHH:mm:ss( 「T」 分離器)或yyyyMMdd HH:mm:ss(無定界符破折號)

重要,如果你生成的腳本,包括datetime常量。

請參閱Jamie Thomson's article on SQL Blog