c# - 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 运行吗?如有必要,我很乐意提供更多信息。
解决方案
我猜您是在非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。
推荐阅读
- sql-server - 提供者:TCP 提供者,错误:0 - 信号量超时期限已过
- sql - 当 DateTime 与文本连接时,Oracle 错误地导出 MD5
- mysql - 任何人都可以找出给定 sql 语句中的错误吗?
- testing - 如何在 Postman 上读取 Post 请求的内容?
- java - 自定义登录页面 Spring Security 的 403 错误
- import - 在我的主架构中使用具有正确命名空间的导入架构
- visual-studio - 在 Visual Studio 异常设置中是否有启用/禁用“公共语言运行时异常”的键盘快捷键?
- excel - 从运行任何事务生成的 Excel 电子表格中访问数据
- powershell - Vsts 将变量作为对象数组传递
- excel - 如何使用 ISBLANK 将数据填充到空单元格中?