2014-12-02 243 views
0

我正在使用C#与Mvvm Light和Mysql数据库的应用程序。当我做一个插入到数据库与对象是一个DateTime对象,我收到以下错误的参数:获取“System.FormatException:输入字符串的格式不正确。”在日期时间对象插入到MySql数据库

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对象):

 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结果一个破发点是 enter image description here

而且下面是我对插入到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。

+0

从这里的MySQL文档:http://dev.mysql.com/doc/refman/5.1/en/datetime.html,DateTime格式应该在'YYYY-MM-DD HH:MM:SS' – Saggio 2014-12-02 18:17:13

+0

我很欣赏那个萨吉奥。 – yams 2014-12-02 18:23:04

+0

但我确实有一个问题,我不能将字符串推入数据库。如果我将它转换回日期时间对象,它会将其转换回UTC,所以如何在不发生这种情况的情况下将它重新插入数据库? – yams 2014-12-02 18:26:07

回答

0

所以我发现了这个问题。我的日期时间实际上已经是正确的格式。不幸的是,当参数化我的查询时,Enum MySqlDbType.DateTime抛出了一个错误的错误,所以我刚刚在AddValue中传入了日期。

 string connStr = "server=****;database=" + projName + ";user=***;port=****;password=****;"; 
     MySqlConnection conn = new MySqlConnection(connStr); 
     MySqlCommand cmd; 

     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", proj.ProjectID); 
      cmd.Parameters.AddWithValue("?projectnamecolumn", 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", proj.ProjectNotes); 
      cmd.ExecuteNonQuery(); 
      conn.Close(); 
     } 
     catch (Exception e) 
     { 
      Console.WriteLine(e.ToString()); 
     } 

一旦我从AddWithValue中删除了Enum,它就工作得很好。