我在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();
}
答案 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自动处理您的连接和命令,而不是手动调用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
列,所以我的回答似乎无关紧要,但我still认为将DateTime保存为其值,而不是字符串表示。