首页 > 解决方案 > T-SQL 有一个`time` 数据类型——C# 是否只有`time`,而不是`datetime` 数据类型?

问题描述

我正在学习并且仍然习惯于 asp.net-mvc、C# 和 SQL 的“T”版本。

我有一个数据库,我在其中创建了一个 field DueDate, data type Date... 和另一个 field DueTime, data typeTime.sql文件中创建表并使用一些示例条目作为种子。

但是在我的model.cs,在 C# 中,似乎只有DateTimeC# 中的数据类型?

但是使用该数据类型使得在视图中,您必须为该字段输入日期DueTime时间,这既不是我想要的,也不是用户方便或可口的。

我搜索了文档,并在谷歌上搜索了示例,但我似乎找不到任何与我正在做的事情足够相似的示例,我可以推断出一些东西。

这是.sql创建和播种表的文件:

CREATE TABLE [dbo].[Homeworks]      /* use plural db name */
(
    [ID] INT IDENTITY (1,1) NOT NULL,
    [Priority]  NVARCHAR(18)        NOT NULL,
    [DueDate]   DATE        NOT NULL,
    [DueTime]   TIME(0)     NOT NULL,
    [Dept]      NVARCHAR(4) NOT NULL,
    [Course]    NVARCHAR(9) NOT NULL,
    [Assignment]    NVARCHAR(64)    NOT NULL,
    [Notes]     NTEXT       NOT NULL,

    CONSTRAINT [PK_dbo.Homeworks] PRIMARY KEY CLUSTERED ([ID] ASC)
);

INSERT INTO [dbo].[Homeworks] (Priority, DueDate, DueTime, Dept, Course, Assignment, Notes) VALUES
    ('super-important','2019-11-11','11:59:00', 'CS', '123', 'Questions/Answers', 'best to read ch 5 first'),
    ('meh','2019-11-18','11:59:00','CS','234','write helloWorld program','find out how to write a helloWorld program'),
    ('important','2019-11-13','11:59:00','MTH','123','chapter 3 problems','do the odd-numbered ones'),
    ('regular','2019-11-15','11:59:00','WR','101','write essay paper','figure out something to write an essay about'),
    ('notes','2019-11-14','11:59:00','CS','189','do up notes over chapters 1-5','make sure you know that crap for the mid-term')

GO

这是模型类的相关部分:

        [Required]
        [DisplayName("Due Date")]
        public DateTime DueDate { get; set; }

        //------------------------------------------------------------
        [DisplayName("Due Time"), Required]
        public DateTime DueTime { get; set; }

localhost只要您在time字段中输入完整日期,这一切都可以正常工作,就像在您运行页面时一样。但是输入应该会进入数据库。

我如何让表格简单地接受time现场时间?我使用什么数据类型?

标签: c#.nettsqlasp.net-mvc-5

解决方案


.Net 框架没有内置Time类型,也没有内置Date类型。
它确实有TimeSpan,但这与Time- C#TimeSpan实际上是一个持续时间 - 两个时间点之间的时间量 - 而 SQL Server 的Time数据类型实际上是一天中的时间 - 并且也记录如下:

定义一天中的某个时间。时间没有时区感知,基于 24 小时制。

它的范围是00:00:00.0000000通过23:59:59.9999999

然而, .Net 的TimeSpan结构被记录为

表示时间间隔。

它的范围从它MinValue到有MaxValue字段,它们是

-10675199.02:48:05.4775808通过10675199.02:48:05.4775807.

说了这么多,由于 .Net 框架没有TimeOfDay数据类型,它使用 aTimeSpan来映射到 SQL Server 的Time数据类型,您可以随意使用该数据类型来表示一天中的时间(这也是DateTime'的类型s structTime属性,这意味着 .Net 框架本身使用这种类型来表示一天中的时间。

如果您想要 .Net 的替代日期时间 API,您应该查看NodaTime.


推荐阅读