2009-12-19 95 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