将 Datetime.now 从 asp.net 插入 sql 服务器
Insert Datetime.now from asp.net into sql server
我正在尝试将 'DateTime.Now' 插入日期时间的 sql 列类型,但是在 sql
table 日期中完成插入后就可以了! (exp: 2015-02-11) 但时间存储为 00:00:00!!!我尝试了许多替代方案。
这是我的代码:
sqlComm.Parameters.Add("@join_date", SqlDbType.Date).Value = DateTime.Now.ToString("yyyy-MM-dd h:m:s");
我错过了什么???
您正在指定 SqlDbType
的 Date
- 没有时间。因此,当驱动程序将参数值转换为所需类型时,它会删除时间部分。
你 也 无缘无故地将 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;
Jon 的回答很好,但您也可以像这样让事情变得更简单:
sqlComm.Parameters.AddWithValue("@join_date", DateTime.Now);
它会根据值的类型自动使用正确的数据类型。
另外 - 你说你是从 ASP.Net 打电话的。在 Web 应用程序中,DateTime.Now
通常不合适 - 因为它使用 服务器 的时区,并且它不保留任何偏移信息,因此在 daylight saving time 回退转换。我建议将基于 UTC 的值存储在数据库中 (DateTime.UtcNow
)。
如果您觉得服务器的本地时区与您的用例相关,请考虑将数据库列切换为 datetimeoffset
类型并使用 DateTimeOffset.Now
。这将避免 DST 转换出现问题。
我正在尝试将 'DateTime.Now' 插入日期时间的 sql 列类型,但是在 sql
table 日期中完成插入后就可以了! (exp: 2015-02-11) 但时间存储为 00:00:00!!!我尝试了许多替代方案。
这是我的代码:
sqlComm.Parameters.Add("@join_date", SqlDbType.Date).Value = DateTime.Now.ToString("yyyy-MM-dd h:m:s");
我错过了什么???
您正在指定 SqlDbType
的 Date
- 没有时间。因此,当驱动程序将参数值转换为所需类型时,它会删除时间部分。
你 也 无缘无故地将 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;
Jon 的回答很好,但您也可以像这样让事情变得更简单:
sqlComm.Parameters.AddWithValue("@join_date", DateTime.Now);
它会根据值的类型自动使用正确的数据类型。
另外 - 你说你是从 ASP.Net 打电话的。在 Web 应用程序中,DateTime.Now
通常不合适 - 因为它使用 服务器 的时区,并且它不保留任何偏移信息,因此在 daylight saving time 回退转换。我建议将基于 UTC 的值存储在数据库中 (DateTime.UtcNow
)。
如果您觉得服务器的本地时区与您的用例相关,请考虑将数据库列切换为 datetimeoffset
类型并使用 DateTimeOffset.Now
。这将避免 DST 转换出现问题。