【发布时间】:2014-12-02 18:12:45
【问题描述】:
我正在使用带有 Mvvm Light 和 Mysql 数据库的 C# 开发应用程序。当我使用作为 DateTime 对象的对象参数插入数据库时,我收到以下错误:
System.FormatException: Input string was not in a correct format.
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
at System.String.System.IConvertible.ToInt32(IFormatProvider provider)
at System.Convert.ToInt32(Object value)
at MySql.Data.Types.MySqlInt32.MySql.Data.Types.IMySqlValue.WriteValue(MySqlPacket packet, Boolean binary, Object val, Int32 length)
at MySql.Data.MySqlClient.MySqlParameter.Serialize(MySqlPacket packet, Boolean binary, MySqlConnectionStringBuilder settings)
at MySql.Data.MySqlClient.Statement.SerializeParameter(MySqlParameterCollection parameters, MySqlPacket packet, String parmName, Int32 parameterIndex)
at MySql.Data.MySqlClient.Statement.InternalBindParameters(String sql, MySqlParameterCollection parameters, MySqlPacket packet)
at MySql.Data.MySqlClient.Statement.BindParameters()
at MySql.Data.MySqlClient.PreparableStatement.Execute()
at MySql.Data.MySqlClient.MySqlCommand.ExecuteReader(CommandBehavior behavior)
at MySql.Data.MySqlClient.MySqlCommand.ExecuteNonQuery()
以下是我的视图模型代码(proj.ProjectStartDate 是一个日期时间对象):
DateTime startDate = projectStartDateProperty?? DateTime.Now;
string startStr = startDate.ToString("d");
DateTime projStart = Convert.ToDateTime(startStr);
DateTime endDate = projectEndDateProperty ?? DateTime.Now;
string endStr = endDate.ToString("d");
DateTime projEnd = Convert.ToDateTime(endStr);
proj.ProjectName = _projName;
proj.ProjectStartDate = projStart;
proj.ProjectEndDate = projEnd;
proj.ProjectNotes = _projNotes;
ProjectDbInteraction.InsertProject(_projName, proj);
在 proj.ProjectEndDate 设置断点后,结果为
下面是我插入 MySql 数据库的模型代码:
string connStr = "server=*****;database=" + projName + ";user=*****;port=*****;password=*****;";
MySqlConnection conn = new MySqlConnection(connStr);
MySqlCommand cmd;
string queryInsertintoProjTable;
try
{
conn.Open();
cmd = new MySqlCommand("INSERT INTO " + projName +
".project(ProjectID,ProjectName,ProjectStartDate,ProjectEndDate,ProjectNotes) VALUES("
+ "(?projectid, ?projectnamecolumn,?projectstartdatecolumn,?projectenddatecolumn,?projectnotescolumn);", conn);
cmd.Parameters.AddWithValue("?projectid", MySqlDbType.Int32).Value = proj.ProjectID;
cmd.Parameters.AddWithValue("?projectnamecolumn", MySqlDbType.VarChar ).Value = proj.ProjectName;
cmd.Parameters.AddWithValue("?projectstartdatecolumn", proj.ProjectStartDate.ToString("yyyy-MM-dd HH:mm:ss"));
cmd.Parameters.AddWithValue("?projectenddatecolumn", proj.ProjectEndDate.ToString("yyyy-MM-dd HH:mm:ss"));
cmd.Parameters.AddWithValue("?projectnotescolumn", MySqlDbType.VarChar).Value = proj.ProjectNotes;
cmd.ExecuteNonQuery();
conn.Close();
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
那么我需要做些什么来解决这个问题?这是我第一次使用 MySql。
【问题讨论】:
-
来自这里的 MySQL 文档:dev.mysql.com/doc/refman/5.1/en/datetime.html,DateTime 格式应该是
YYYY-MM-DD HH:MM:SS -
不错的收获,我很欣赏 Saggio。
-
但我确实有一个问题,我无法将字符串推送到数据库中。如果我将它转换回日期时间对象,它会将其转换回 UTC 那么我如何将它推回数据库而不发生这种情况?
-
为什么不能将字符串推送到数据库中?错误说
the input string was not in a correct format.你应该可以做var mySQLDateTime = dateTime.ToString("yyyy-MM-dd HH:mm:ss"); -
即使列类型是日期时间?
标签: c# mysql datetime mvvm-light