c# 中的 DateTime 和 SQL server 中的 DateTime 有啥区别吗?

Posted

技术标签:

【中文标题】c# 中的 DateTime 和 SQL server 中的 DateTime 有啥区别吗?【英文标题】:Is there any difference between DateTime in c# and DateTime in SQL server?c# 中的 DateTime 和 SQL server 中的 DateTime 有什么区别吗? 【发布时间】:2010-11-13 23:28:04 【问题描述】:

c#中的DateTime和SQL server中的DateTime有区别吗?

【问题讨论】:

【参考方案1】:

精度和范围(所以,一切都很重要;-p)

来自 MSDN:

.NET System.DateTime

DateTime 值类型表示日期和时间,其值范围从 0001 年 1 月 1 日午夜 12:00:00 到公元 9999 年 12 月 31 日 (CE) 晚上 11:59:59 之间

时间值以 100 纳秒为单位,称为滴答声,特定日期是 GregorianCalendar 日历中自公元 001 年 1 月 1 日午夜 12:00 以来的滴答声数

Transact SQL datetime

日期范围:1753 年 1 月 1 日至 9999 年 12 月 31 日

精度:四舍五入到 0.000、0.003 或 0.007 秒的增量

【讨论】:

太棒了!我想在 c# 中编写一个函数,该函数获取字符串类型的参数并将其转换为 datetime 。我想将函数的返回值保存到数据库中。该函数应该处理一个空字符串,在这种情况下它应该返回 null。但是不能插入null。怎么了? 可能只是需要在.NET代码中使用DBNull.Value来表示数据库空值。 还有时区方面 - 即使 DateTime 没有关联的时区,它可以知道它是“本地”还是 UTC。【参考方案2】:

您也可以使用 SQL Server 2008 的 datetime2。精度也是 100ns。事实上,它是为了匹配 .NET DateTime 精度而引入的。

datetime2 (Transact-SQL)

【讨论】:

注意:这是默认的 datetime2 精度(可以降低到秒精度)。【参考方案3】:

是的。

SQL 日期时间类型的 C# 等效项是 SqlDateTime

因此,定义 SQL 调用(当然是带有参数集合的存储过程)以使用 SQLDateTime。优点是您可以在构建命令时捕获任何溢出或超出范围的错误,而不是在执行时从数据库引擎中捕获。

【讨论】:

以上是关于c# 中的 DateTime 和 SQL server 中的 DateTime 有啥区别吗?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 和 C# 中 DateTime 的毫秒数不相同

在 C# 中将字符串转换为 DateTime 并写入 SQL

使用 C# DateTime 将 SQL 日期时间设置为最小值

在为 Date SQL Server 字段添加 DateTime C# 值时,我应该使用 Date 还是 DateTime SqlDbType?

c# datetime to sql,包括秒

C# 将 DateTime 转换为 Sql Server 2005 格式