DateTime 未在具有 "DateTime" 数据类型的 PHPMyadmin 数据库字段中保存正确的日期和时间

DateTime is not saving correct Date and Time in PHPMyadmin database field with"DateTime" data type

我在 C# winform 应用程序中有 DateTimePicker 对象,我从中获取 yyyy-MM-dd HH:mm tt 自定义格式的日期和时间。但是每当我将数据保存在 phpmyadmin 中时,它都会在特定字段中保存为 "0000-00-00 00:00:00.000000"。我的代码如下:-

private void submit_Click(object sender, EventArgs e)
{
    DateTime scd = MydateTimePicker.Value;
    cn.Open();
    cmd.Connection = cn;
    cmd.CommandType = CommandType.Text;
    cmd.CommandText = "insert into flight(flight_schedule) values ('" + scd + "')";
    cmd.ExecuteNonQuery();
    cn.Close();
}

没有

你有一个bad habit to kick as choosing wrong data type。你应该永远不要将你的DateTime值存储为string

将您的 flight_schedule 更改为 DATETIME column type and pass your DateTime value directly with a parameterized query

还可以使用 using statement 自动处理您的连接和命令,而不是手动调用 CloseDispose 方法。

using(var cn = new MySqlConnection(conString))
using(var cmd = cn.CreateCommand())
{
   cmd.CommandText = "insert into flight(flight_schedule) values (@date)";
   cmd.Parameters.Add("@date", MySqlDbType.Datetime).Value = MydateTimePicker.Value;
   // I assume you change your column type to Datetime
   cn.Open();
   cmd.ExecuteNonQuery();
}

编辑:

看起来你已经在你的数据库中有 DATETIME 列,所以我的回答似乎无关紧要,但我 相信将你的 DateTime 保存为它们的值,不是他们的字符串表示。

在 c# 中,当您在字符串上下文中使用 DateTime 变量时,它会被视为附加了 .ToString()。不幸的是,它提供了特定于语言环境的日期呈现。在我的美国语言环境中,它看起来像这样:

 2/26/2016 7:12:19 PM

MySQL,当您将日期时间值作为字符串提供给它时​​,需要这种格式。

2016-02-26 19:12:19

在 MySQL 的某些版本中,无法解释日期会导致日期为零。阅读本文以获取有关该主题的更多信息。 http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sqlmode_allow_invalid_dates

您的插入查询构建了一个查询字符串,因此您的 DateTime 值以 MySQL 无法使用的方式格式化。这就是为什么你得到那个奇怪的零日期。

如果您将插入查询更改为此,事情可能会开始起作用。

cmd.CommandText = "insert into flight(flight_schedule) values ('" +
     scd.ToString("yyyy-MM-dd HH:mm:ss") + "')";

更好的是,使用参数。阅读此示例和讨论。 C# SqlParameters Short Hand