DateTime 未在 PHPMyadmin 数据库字段中保存正确的日期和时间,数据类型为“DateTime”

本文关键字:DateTime 时间 数据类型 日期 数据库 PHPMyadmin 未在 字段 保存 | 更新日期: 2023-09-27 18:36:25

我在 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();
}

DateTime 未在 PHPMyadmin 数据库字段中保存正确的日期和时间,数据类型为“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 速记

No.

你有一个坏习惯,因为选择了错误的数据类型。切勿DateTime值存储为string

flight_schedule更改为DATETIME列类型,并使用参数化查询直接传递DateTime值。

还可以使用 using 语句自动释放连接和命令,而不是手动调用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 保存为它们的值,而不是它们的字符串表示形式。