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 自动处理您的连接和命令,而不是手动调用 Close
或 Dispose
方法。
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
我在 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 自动处理您的连接和命令,而不是手动调用 Close
或 Dispose
方法。
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
列,所以我的回答似乎无关紧要,但我
在 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