C# MySqlCommand Insert 显示致命错误命令
C# MySqlCommand Insert shows fatal error command
我有一个 table (Horario) 具有以下类型:
id (int, auto increment)
codMedico (int)
dia (Date)
horarioInicio (Time)
horarioFim (Time)
status_id (int)
我在下面的代码中看不到任何问题,但它只是向我显示 "fatal error" 关于 mysqlexception(在 ExecuteNonQuerry() 方法中抛出)。我在文本字段中收到两次 (11:10)和 (12:10),以及来自日期选择器的日期。
代码如下:
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;
}
我认为这是因为您试图将值 (1) 插入到 id
自动递增列中:
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, ?horarioInicio, ?horarioFim, ?status_id)";
数据库将为 id
生成它自己的值,因此您不需要!
可能有一些无效的 Date/Time 值导致异常。尝试使用:
日期:
cmd.Parameters.AddWithValue("@param", dia.ToDate().ToString("yyyy-MM-dd"));
时间:
cmd.Parameters.AddWithValue("@param", DateTime.Parse(hrFim).ToString("hh:mm:ss"));
如果 ID 是您的主键,您不需要手动为其添加值,我假设因为它是自动递增的,所以它是主键,完全相同的方法无需尝试添加 'ID' 在你的声明中
我有一个 table (Horario) 具有以下类型:
id (int, auto increment)
codMedico (int)
dia (Date)
horarioInicio (Time)
horarioFim (Time)
status_id (int)
我在下面的代码中看不到任何问题,但它只是向我显示 "fatal error" 关于 mysqlexception(在 ExecuteNonQuerry() 方法中抛出)。我在文本字段中收到两次 (11:10)和 (12:10),以及来自日期选择器的日期。
代码如下:
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;
}
我认为这是因为您试图将值 (1) 插入到 id
自动递增列中:
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, ?horarioInicio, ?horarioFim, ?status_id)";
数据库将为 id
生成它自己的值,因此您不需要!
可能有一些无效的 Date/Time 值导致异常。尝试使用:
日期:
cmd.Parameters.AddWithValue("@param", dia.ToDate().ToString("yyyy-MM-dd"));
时间:
cmd.Parameters.AddWithValue("@param", DateTime.Parse(hrFim).ToString("hh:mm:ss"));
如果 ID 是您的主键,您不需要手动为其添加值,我假设因为它是自动递增的,所以它是主键,完全相同的方法无需尝试添加 'ID' 在你的声明中