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

Posted

技术标签:

【中文标题】在为 Date SQL Server 字段添加 DateTime C# 值时,我应该使用 Date 还是 DateTime SqlDbType?【英文标题】:Should I use the Date or DateTime SqlDbType when adding a DateTime C# value for a Date SQL Server field? 【发布时间】:2016-07-26 02:38:52 【问题描述】:

我有一个包含日期数据类型字段的表。尽管在向其中插入值时我希望该字段中的原始日期是这样的:

update reportsgenerated
set begindate = '2016-02-01'
where rptgenid = 2;

...它实际上似乎存储了一个日期时间值,因为它在 LINQPad 中表示为“2/1/2016 12:00:00 AM”。

插入时我分配给参数的 C# 值是 DateTime 类型(因为 C# 没有“仅日期”类型):

DateTime begDate = // bla

既然如此,我是否应该将参数指定为Date类型,以匹配表格:

insertRptsGenerated.Parameters.Add("@BeginDate", SqlDbType.Date).Value = begDate;

...或作为 DateTime 类型,以匹配分配值的类型:

insertRptsGenerated.Parameters.Add("@BeginDate", SqlDbType.DateTime).Value = begDate;

?

【问题讨论】:

如果您的 SQL 版本中可用,您最好使用 DATE 类型。我猜在 C# 中它不会与 DATETIME 字段不同。 .NET System Type to SqlDbType的可能重复 【参考方案1】:

.NET 已经知道它在 .NET 中的类型。你被问到在另一端使用什么类型,因此SqlDbTypeSqlDb 部分;-)。您应该尽可能地匹配数据库端的参数类型。

有关映射的完整列表,请参阅 SQL Server Data Type Mappings 的 MSDN 页面。

该图表显示:

SQL Server DATE == .NET DateTime == SqlDbType.Date

【讨论】:

根据链接的帖子,C#的DateTime的映射是SqlDbType.DateTime2;我没有看到日期。 @B.ClayShannon 你从错误的方向思考这个问题。由于最终与物理存储有关,SQL Server 具有更细粒度的类型。最重要的是 SQL Server 类型。请查看我刚刚添加到答案中的链接(我注意到 Plutonix 链接的问题中也提到了该链接)。

以上是关于在为 Date SQL Server 字段添加 DateTime C# 值时,我应该使用 Date 还是 DateTime SqlDbType?的主要内容,如果未能解决你的问题,请参考以下文章

where 子句中的 case 语句 - SQL Server

如何从XML *向SQL Server DATE字段*中插入NULL

sql server 2008中如何取某字段最大值所在的一条数据(多个字段)

SQL SERVER 从 If Exists 中选择多个字段

SQL Server 修改日期

易语言读sqlserver2008日期型字段