2015-02-11 127 views
0

我试图插入'DateTime.Now'到SQL日期时间列类型,但插入完成时sql表日期是OK! (exp:2015-02-11)但时间存储为00:00:00 !!!我尝试了许多替代品。 这是我的代码:从asp.net插入Datetime.now到sql服务器

sqlComm.Parameters.Add("@join_date", SqlDbType.Date).Value = DateTime.Now.ToString("yyyy-MM-dd h:m:s"); 

我失踪了什么?

+0

Try..date time.now.to字符串( “YYYY-MM-DD HH:MM:SS”) – Chris 2015-02-11 18:11:17

+0

https://msdn.microsoft.com/en-us/ library/8kb3ddd4%28v = vs.110%29.aspx – Chris 2015-02-11 18:11:43

+0

感谢@Chris它的完成。看到接受的答案 – 2015-02-11 18:54:40

回答

8

您在指定SqlDbTypeDate - 这没有时间。因此,当驱动程序将参数值转换为所需类型时,它将删除时间部分。

转换DateTime.Now成一个字符串没有明显的理由...并在使用奇数和有损时间格式的方式这样做(h:m:s,没有AM/PM指示)。如果你确实确实想要转换为字符串,那么最好使用HH:mm:ss作为时间说明符。

这条线:

sqlComm.Parameters.Add("@join_date", SqlDbType.Date).Value = DateTime.Now.ToString("yyyy-MM-dd h:m:s"); 

应该是:

sqlComm.Parameters.Add("@join_date", SqlDbType.DateTime).Value = DateTime.Now; 
+0

是的 - 谢谢!亲爱的Jon Skeet时间部分是在稍后的修改中添加的,所以我忘记更改DBType,字符串转换是我的一个变化。任何方式非常感谢你。 – 2015-02-11 18:31:27

2

乔恩的答案是好的,但也可以让事情变得更容易这样的:

sqlComm.Parameters.AddWithValue("@join_date", DateTime.Now); 

它会自动根据值的类型使用正确的数据类型。

此外 - 你说你是从ASP.Net调用这个。在网络应用程序中,DateTime.Now通常不合适 - 因为它使用服务器的时区,并且它不保留任何偏移量信息,因此在daylight saving time回退转换期间可能不明确。我建议在数据库中存储基于UTC的值(DateTime.UtcNow)。

如果您觉得服务器的本地时区与您的用例相关,那么请考虑将数据库列切换为datetimeoffset类型并使用DateTimeOffset.Now。这将避免DST转换的问题。

参见:The case against DateTime.Now

+0

哇!谢谢这帮了很多! – 2015-02-11 19:16:58