dbcommand以mysql不接受的日期格式生成sql

2skhul33  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(239)

我有一个 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。datetime值不正确:“27/08/2018 16:50:30”用于第1行的“mydate”列0.000秒
我能做些什么来确保它用mysql可以接受的有效sql运行吗?如果有必要,我很乐意提供更多的信息。

xggvc2p6

xggvc2p61#

我猜你是在一个非- en-US 并且遇到了mysql bug#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。

相关问题