【问题标题】:DateTime is not saving correct Date and Time in PHPMyadmin database field with"DateTime" data typeDateTime 未在 PHPMyadmin 数据库字段中使用“DateTime”数据类型保存正确的日期和时间
【发布时间】:2016-06-09 14:45:39
【问题描述】:

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

【问题讨论】:

    标签: c# mysql datetime datetimepicker


    【解决方案1】:

    没有。

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

    将您的flight_schedule 更改为DATETIME 列类型,并使用parameterized query 直接传递您的DateTime

    还可以使用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 列,所以我的回答似乎无关紧要,但我 still 相信将您的 DateTime 保存为它们的值,而不是它们的字符串表示形式。

    【讨论】:

    • 嗯。我想知道责备陌生人是否有你想象中的习惯?您对他的问题的解决方案是正确的,但从他的问题中可以清楚地看出他已经在他的表中使用了 DATETIME 列。
    • @OllieJones 我只是错过了标题中的“使用 DateTime 数据类型”部分。对于那个很抱歉。您的回答完全解释了问题的root+1 为此。但是,我仍然捍卫“选择错误的数据类型”一词。如果你有一个DateTime,你到底为什么要把它保存为一个字符串?如果您将来尝试将 那些 字符串解析为 DateTime,这将破坏您的代码的一致性并且可能会产生模棱两可的情况。只是我的两分钱。
    【解决方案2】:

    在 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

    【讨论】:

      猜你喜欢
      • 2011-09-03
      • 1970-01-01
      • 2013-09-28
      • 1970-01-01
      • 1970-01-01
      • 2013-04-20
      • 2015-12-10
      • 2019-10-30
      相关资源
      最近更新 更多