2015-08-21 3 views
0

У меня есть таблица (Horario) со следующими типами:C# MySqlCommand Вставка показывает фатальная Ошибка команда

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

Я не могу увидеть любую проблему на коду ниже, но это только показывает мне «фатальную ошибку» на mysqlexception (брошено в ExecuteNonQuerry() метод я получаю два раза в текстовое поле (11:10) и (12: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; 
} 
+0

Я не использую MySQL, но я бы предположил, что вам придется использовать параметр «TimeSpan» значение для 'Time', а не' DateTime'. – jmcilhinney

ответ

0

Я думаю, это потому, что ты е пытается вставить значение (1) в ваш id авто колонка приращений:

cmd.CommandText = «INSERT INTO Horario (идентификатор, codMedico, ди, 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, так что вам не нужно!

+0

Думаю, тоже. –

0

Возможно, произошли некоторые недопустимые значения Дата/Время. Попробуйте использовать:

Для Дата:

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

For Time:

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

Если идентификатор ваш первичный ключ, вам не нужно вручную добавить значения к нему, я предполагая, что это автоматический приращение, что это первичный ключ, тот же самый метод, не пытаясь добавить «ID» в ваш оператор