【问题标题】:C# MySqlCommand Insert shows fatal error commandC# MySqlCommand Insert 显示致命错误命令
【发布时间】:2015-08-21 01:45:56
【问题描述】:

我有一张桌子 (Horario),有以下类型:

id (int, auto increment)
codMedico (int)
dia (Date)
horarioInicio (Time)
horarioFim (Time)
status_id (int)

我在下面的代码中看不到任何问题,但它只是向我显示了 mysqlexception 上的“致命错误”(在 ExecuteNonQuerry() 方法中抛出。我在文本字段 (11:10) 和 (12) 中收到两次 Times :10),以及来自 Datepicker 的日期。

代码如下:

public bool agendaMedico_Novo(String codMedico, DateTime dia, String hrInicio, String hrFim, int status_id)
{
    if (bdConn.State == ConnectionState.Open)
    {               
        MySqlCommand cmd = new MySqlCommand();
        cmd.Connection = bdConn;

        cmd.CommandText = "INSERT INTO horario (id, codMedico, dia, horarioInicio, horarioFim, status_id) VALUES (1, ?codMedico, ?dia, ?horarioInicio, ?horarioFim, ?status_id)";
        // cmd.CommandText = "INSERT INTO horario (codMedico, dia, horarioInicio, horarioFim, status_id) VALUES ("+codMedico+", "+dia.ToDate()+", "+"11:12"+ ", "+ "12:13"+ ", 1"+")";                                       
        try 
        {

            cmd.Parameters.Add("?codMedico", MySqlDbType.Int16).Value = Int16.Parse(codMedico);

        }

        catch (Exception e)
        {
            MessageBox.Show("Cod invalido!");

        }
        try
        {
            MessageBox.Show(dia.ToDate().ToString());
            cmd.Parameters.Add("?dia", MySqlDbType.Date).Value = dia.ToDate();
        }

        catch (Exception e)
        {
            MessageBox.Show("Dia invalido!");

        }
        try
        {
            cmd.Parameters.Add("?horarioInicio", MySqlDbType.Time).Value = DateTime.Parse(hrInicio);

        }
        catch (Exception e)
        {
            MessageBox.Show("Horario Invalido");

        }                  
        try
        {
            cmd.Parameters.Add("?horarioFim", MySqlDbType.Time).Value = DateTime.Parse(hrFim);

        }
        catch (Exception e)
        {
            MessageBox.Show("Horario Invalido");

        }
        try
        {
            cmd.Parameters.Add("?status_id", MySqlDbType.Int16).Value = status_id;
        }

        catch (Exception e)
        {
            MessageBox.Show("dasasdasd");
        }

        MessageBox.Show(cmd.CommandText);

        //try
        //{

        try
        {
            cmd.ExecuteNonQuery();
        }

        catch (MySqlException m)
        {
            MessageBox.Show(m.StackTrace);
            MessageBox.Show(m.Message);
        }

        return true;
    }
    else
    {
        MessageBox.Show("Erro de banco de dados. Tente novamente mais tarde");
        return false;
    }
    //return 0;
}

【问题讨论】:

  • 我不使用 MySQL,但我猜您必须为 Time 列使用 TimeSpan 参数值,而不是 DateTime

标签: c# mysql visual-studio executenonquery datetime-parsing


【解决方案1】:

我认为这是因为您试图将值 (1) 插入到您的 id 自动增量列中:

cmd.CommandText = "INSERT INTO horario (id, codMedico, dia, horarioInicio, horarioFim, status_id) VALUES (1, ?codMedico, ?dia, ?horarioInicio, ?horarioFim, ?status_id)";

改为为您的 CommandText 试试这个:

cmd.CommandText = "INSERT INTO horario (codMedico, dia, horarioInicio, horarioFim, status_id) VALUES (?codMedico, ?dia, ?horarioInicio, ?horarioFim, ?status_id)";

数据库将为id 生成它自己的值,所以你不需要!

【讨论】:

    【解决方案2】:

    可能有一些无效的日期/时间值导致了异常。尝试使用:

    日期:

    cmd.Parameters.AddWithValue("@param", dia.ToDate().ToString("yyyy-MM-dd"));
    

    时间:

    cmd.Parameters.AddWithValue("@param", DateTime.Parse(hrFim).ToString("hh:mm:ss"));
    

    【讨论】:

      【解决方案3】:

      如果 ID 是您的主键,则您不需要手动向其添加值,我假设因为它是主键的自动增量,完全相同的方法无需尝试在您的声明

      【讨论】:

        猜你喜欢
        • 2013-01-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-05-24
        • 2014-04-07
        • 2017-04-29
        • 2014-10-13
        相关资源
        最近更新 更多