【发布时间】:2025-12-21 02:40:12
【问题描述】:
我正在将我的 C# 程序中的一些数据插入 SQL Server 2012。我的表中有 datetime 类型的列。我的 C# 代码:
string date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff");
// returns 2016-04-11 11:47:05.535
当我调试我的应用程序时,我可以看到日期格式正确(与上面相同)。但是当我查看我的数据库时,这个日期是:
2016-11-04 11:47:05.537
交换月份和日期。为什么会这样?
【问题讨论】:
-
Sql server does not store date display format. 当您使用 SSMS 选择日期时间值时,它将以数据库的默认显示格式显示为字符串。试试这个
SELECT DATENAME(MONTH, YourDateTimeColumn),看看你得到的月份是否正确。 -
停止使用字符串。它们是您的格式问题的原因。在 C# 中使用
DateTime,在 SQL Server 中使用datetime(或datetime2)。从 C# -> SQL Server 发送数据时使用参数。只要确保您始终使用日期时间数据类型,您就不会遇到格式问题。 -
@L-Three - 但他们在 C# 中使用
string。一旦转换为字符串(在 C# 或 SQL 中),您就会面临格式问题。 -
@L-Three - 但这里的问题是,我保证,非常好 .NET DateTime 值和 SQL Server
datetime值之间存在字符串转换.如果没有该字符串转换,OP 将不会报告“SQL”已切换日/月值。你似乎是唯一一个提到显示的人。 -
@L-Three - 不,它不会。 .NET 的 datetime 类型存储自过去某个固定点以来的 100 纳秒间隔的单个计数。它不包含格式或文化信息。 SQL Server 的 datetime 类型存储自 1900 年 1 月 1 日以来的(小数)天数,没有格式或区域性信息。 ADO.NET 了解如何在这两者之间进行转换,并且不使用任何文化或格式信息。如果您(程序员)开始将值转换成字符串或从字符串转换出,您可以仅引入问题。
标签: c# sql-server datetime