【发布时间】:2010-12-28 05:46:51
【问题描述】:
我在 C# 中有一个 dateTime 对象,我想插入 SQL Server 日期时间字段。正确的格式是什么?
【问题讨论】:
-
您可能不应该在代码中构建 SQL 字符串。相反,您应该考虑使用存储过程、参数化查询或 ORM。当您传递对象时,任何这些都可以解决您的格式化问题,您不必进行任何字符串格式化。
我在 C# 中有一个 dateTime 对象,我想插入 SQL Server 日期时间字段。正确的格式是什么?
【问题讨论】:
正确的方法是使用参数化查询,不是文本格式。然后你可以只使用强类型的SqlDbType.DateTime 参数。
(如果您绝对必须使用文本格式来执行此操作 - 我强烈建议不要这样做 - 那么像 yyyyMMdd HH:mm:ss 这样的东西应该可以解决问题。)
【讨论】:
yyyyMMdd HH:mm:ss(没有破折号 - 在某些语言设置中会导致问题)
为了扩展@Luke 的回答,前几天我遇到了这个错误。
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 常量的脚本,这一点很重要。
【讨论】:
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
【讨论】: