2014-12-02 2 views
0

Mvvm Light 및 Mysql 데이터베이스와 함께 C#을 사용하는 응용 프로그램에서 작업하고 있습니다. 나는 다음과 같은 오류를 얻고있다 DateTime 개체 인 개체의 매개 변수를 사용하여 데이터베이스에 삽입 작업을 수행 할 때 :"System.FormatException : 입력 문자열이 올바른 형식이 아닙니다." DateTime 개체에 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은 날짜 개체 됨) :

결과는 proj.ProjectEndDate 설정 브레이크 포인트와
 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); 

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

+0

좋은 캐치 나는 Saggio를 평가한다. – yams

+0

하지만 DB에 문자열을 푸시 할 수없는 질문이 있습니다. 그리고 그것을 다시 날짜 시간 객체로 변환하면 다시 UTC로 변환 될 것입니다. 어떻게 이런 일이 일어나지 않고 DB로 다시 밀어 넣을 수 있을까요? – yams

답변

0

그래서이 문제를 발견했습니다. 내 datetime은 사실 이미 올바른 형식으로되어있었습니다. 불행히도 내 쿼리를 매개 변수화 할 때 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을 제거하면 정상적으로 작동합니다.

관련 문제