This question already has answers here:
How do I represent a time only value in .NET?
                                
                                    (8个答案)
                                
                        
                        
                            how to use sql server time data type in .net application?
                                
                                    (5个答案)
                                
                        
                                上个月关闭。
            
                    
我正在学习并且仍然习惯使用asp.net-mvc和C#,以及SQL的“ T”版本。

我有一个数据库,在其中我在DueDate文件中创建了一个字段Date,数据类型为DueTime ...,另一个字段为Time,数据类型为.sql,以创建表并使用一些示例条目将其作为种子。

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

但是使用该数据类型可以使它在View中输入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字段中获取仅接受时间的表格?我要使用哪种数据类型?

最佳答案

.Net框架没有内置的Time类型,也没有内置的Date类型。
它确实具有TimeSpan,但与Time不同-c#TimeSpan实际上是持续时间-两个时间点之间的时间长度-而SQL Server的Time数据类型实际上是时间的一天-也是documented这样的:


  定义一天中的时间。时间没有时区意识,基于24小时制。


它的范围是从00:00:00.000000023:59:59.9999999

.Net的TimeSpan结构记录为


  表示时间间隔。


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

-10675199.02:48:05.477580810675199.02:48:05.4775807

综上所述,由于.Net框架没有TimeOfDay数据类型,因此它使用TimeSpan映射到SQL Server的Time数据类型,您可以随意使用该数据类型来表示时间。日期(这也是DateTime的struct Time属性的类型,这意味着.Net框架本身使用此类型表示一天中的时间。

如果您想要.Net的替代日期时间api,则应签出NodaTime

关于c# - T-SQL具有“时间”数据类型-C#是否仅具有“时间”而不是“日期时间”数据类型? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58671229/

10-12 19:18
查看更多