簡體   English   中英

在插入MySql數據庫的DateTime對象上獲取“ System.FormatException:輸入字符串的格式不正確。”

[英]Getting a “System.FormatException: Input string was not in a correct format.” on a DateTime Object insert into MySql Database

我正在使用將C#與Mvvm Light和Mysql數據庫一起使用的應用程序。 當我使用對象的參數作為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。

所以我找出了問題所在。 我的日期時間實際上已經是正確的格式。 不幸的是,當參數化我的查詢時,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,它就可以正常工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM