我有一个表,其中日期列名称定义为 proddate 并定义为 DATE。
这是我将值写入表的代码:
cmd.Parameters.Add("@Mydate", MySqlDbType.DateTime).Value = Convert.ToDateTime(MyArray[4]).ToString();
结果为 0000-00-00
当我将其更改为
cmd.Parameters.Add("@Mydate", MySqlDbType.DateTime).Value = Convert.ToDateTime(MyArray[4]);
结果是正确的。例如:2013-11-14
但是,我有下面几行代码
cmd1.Parameters.Add("@date", MySqlDbType.DateTime).Value = Convert.ToDateTime(MyArray[4].ToString());
这不会产生错误。我在表中得到了正确的结果
在我以相同的方法编写此代码后几行:
cmd3.Parameters.Add("@Mydate", MySqlDbType.DateTime).Value = MyArray[4].ToString();
这也没有给出错误
最后两行我在测试时犯了错误。但最后2个示例的列被定义为DATE格式
有什么想法吗?或者说我欢迎来到 Mysql 的神秘世界?
PS:我使用 MYSQL CONNECTOR 6.7.4.0 .NET3.5 和 C# 2008 Express。我的服务器MYSQL是5.0
最佳答案
在第一个版本中,您使用 DateTime
的默认格式将值转换为 DateTime
,然后then 转换为字符串> 值(value)。然后 MySQL 尝试解析它,但可能会失败。
在第二个版本中,您将值解析为 DateTime
,并将其直接提供给 MySQL。这是最好的方法,但您需要注意所使用的输入格式。
第三个版本与第二个版本类似,只是有一个显式的 ToString
调用。如果 MyArray
的类型为 string[]
,则基本上是无操作。
第四个版本将字符串输入直接提供给 MySQL,MySQL 大概能够自行解析它。不过,我建议避免使用这种形式 - 在 .NET 代码中解析它,这样您可以拥有更多控制权。
关于mysql - 为什么我的日期写为 0000-00-00,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19980524/