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

时间:2016-02-26 11:42:47

标签: c# mysql datetime datetimepicker

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

没有

你有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保存为其值,而不是字符串表示。