首页 > 解决方案 > DbCommand 以 MySQL 不接受的日期格式生成 SQL

问题描述

我有一个DbCommand这样的创建。

DbCommand cmd = conn.CreateCommand();

然后我创建cmd.CommandText格式。

"Insert into myTable (`Id`,`myDate`) values (@p0,@p1)"

在处理第二个参数时(在创建第一个参数之后),我有表单的代码。

var p2 = command.CreateParameter();
p2.ParameterName = "@p2";
p2.Value = myDateTimeObject; //not a string but an actual DateTime object
command.Parameters.Add(p2);

在我的代码中,我有以下部分来执行DbCommand变量。

int result = cmd.ExecuteNonQuery();

当我实际执行它时,它成功创建了以下语句,但是当 MySQL 尝试执行它时,该语句出错。

Insert into myTable (`Id`,`myDate`) values (1,'27/08/2018 16:50:30')

当我查看错误时,它如下所示。

错误代码:1292。不正确的日期时间值:'27/08/2018 16:50:30' 列 'myDate' 在第 1 行 0.000 秒

我能做些什么来确保它使用 MySQL 将接受的有效 SQL 运行吗?如有必要,我很乐意提供更多信息。

标签: c#mysqldatabase

解决方案


我猜您是在非en-US语言环境中运行,并且遇到了MySQL 错误 #80011

一种解决方法是将DateTime自己格式化为 MySQL 服务器可以理解的格式:

var p2 = command.CreateParameter();
p2.ParameterName = "@p2";
p2.Value = myDateTimeObject.ToString("yyyy'-'MM'-'dd' 'HH':'mm':'ss'.'ffffff", CultureInfo.InvariantCulture);
command.Parameters.Add(p2);

另一种解决方法是切换到没有此错误的其他 MySQL ADO.NET 连接器,例如MySqlConnector


推荐阅读