【发布时间】:2019-04-10 18:58:59
【问题描述】:
以下类从 API json 响应中捕获 SendQueue 对象:
public class SendQueue
{
public DateTime SendDate { get; set; }
public int StatusCode { get; set; }
public string StatusMessage { get; set; }
}
当我收到对象时,我将 SendDate 值转换为字符串以插入 MySQL 数据库,但格式显然不被 DB 接受,因此插入失败。
当我将值转换为字符串时,SendDate 的格式是 "dd/MM/yyyy hh:mm:ss" 而数据库接受 "yyyy-MM-dd hh :mm:ss"。
当然,更好的处理方式是通过参数化查询。但由于我使用的是批量插入,我无法使用 DateTime 对象。
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
如果我use Bulk Insert 也会遇到同样的问题,因为日期最终会转换为存储在文件中的字符串。
【问题讨论】:
-
为什么将日期作为字符串存储在数据库中?
-
3.也不是,将 DateTime 值格式化为字符串的正确位置是在您需要显示它时。数据库应该能够接受 DateTime 值,而不是格式化为字符串。
-
您可以在请求到达 WEB API 和存储到 DB 之前解析 Datetime。这将为您提供更多控制,因为您可以根据您将存储它的数据库引擎对其进行格式化。如果您知道数据库接受的存储格式是什么,您可以在将其发送到移动或 Web 应用程序之前对其进行格式化,并且您将永远不要改变它。
-
@JohnLBevan 这在您使用批量插入时不起作用。参数化查询最好用于一条语句。但是我准备了我的数据,以便在批处理语句中使用它们(例如
INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);)我怀疑这是否适用。 -
@JohnLBevan 完全正确。 SQL Server 要简单得多。是的,这是我的问题。