在为 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 中的类型。你被问到在另一端使用什么类型,因此SqlDbType
的 SqlDb 部分;-)。您应该尽可能地匹配数据库端的参数类型。
有关映射的完整列表,请参阅 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中如何取某字段最大值所在的一条数据(多个字段)