执行过程中遇到致命错误.在更新
本文关键字:更新 致命错误 遇到 过程中 执行 | 更新日期: 2023-09-27 17:50:41
此代码放置在按钮中。当我点击它更新数据时,出现一个消息框错误,说"在命令执行期间遇到致命错误"。
你的回答将是一个很大的帮助。谢谢你
MySqlConnection connection = new MySqlConnection(MyConnectionString);
MySqlCommand cmd;
try
{
connection.Open();
cmd = connection.CreateCommand();
cmd.CommandText = "UPDATE student_offense SET TYPE=@TYPE,DATE_HAPPENED=@DH,DESCRIPTION=@DESC,SANCTION=@SANC" +
"Where STUDENT_NO = @STUDENT_NO And DESCRIPTION=@DESC And SANCTION=@SANC And DATE_HAPPENED=@DH";
cmd.Parameters.AddWithValue("@TYPE", offense_combo.Text);
cmd.Parameters.AddWithValue("@DH", date_hapen.Text);
cmd.Parameters.AddWithValue("@DESC", description_txt.Text);
cmd.Parameters.AddWithValue("@SANC", sanction_txt.Text);
cmd.Parameters.AddWithValue("@STUDENT_NO", studentNo_txt.Text);
cmd.ExecuteNonQuery();
cmd.Parameters.Clear();
MessageBox.Show("updated");
//refresh
cmd.CommandText = "SELECT student_info.Student_no,student_info.Lastname,student_info.Firstname,student_offense.Type,student_offense.Description,student_offense.Date_Happened,student_offense.Sanction,student_offense.Date_Recorded from student_info,student_offense where student_info.student_no = student_offense.student_no";
MySqlDataAdapter sda = new MySqlDataAdapter();
sda.SelectCommand = cmd;
dbdataset = new DataTable();
sda.Fill(dbdataset);
bSource = new BindingSource();
bSource.DataSource = dbdataset;
dataGridView1.DataSource = bSource;
sda.Update(dbdataset);
bSource.DataSource = dbdataset;
dataGridView1.DataSource = bSource;
student_no_valid.Visible = false;
stud_no_error.Visible = true;
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
listBox1.Items.Clear();
description_txt.Text = "";
studentNo_txt.Text = "";
offense_combo.Text = "";
current_date();
sanction_txt.Text = "";
参数@SANC
和Where
之间缺少空格。
试试这个:
cmd.CommandText = "UPDATE student_offense SET TYPE=@TYPE,DATE_HAPPENED=@DH,
DESCRIPTION=@DESC,SANCTION=@SANC" + " Where STUDENT_NO = @STUDENT_NO And
DESCRIPTION=@DESC And SANCTION=@SANC And DATE_HAPPENED=@DH";
建议:如果您的DATE_HAPPENED
列类型在您的表中是Date
,那么您需要发送适当的Date
格式。
Try This:假设用户以dd-MM-yyyy
格式输入Date .
DateTime dt = DateTime.ParseExact(date_hapen.Text,"dd-MM-yyyy",
CutureInfo.InvariantCulture);
现在,在分配DATE_HAPPENED
值时,提供以下格式
cmd.Parameters.AddWithValue("@DH",dt.ToString("yyyy-MM-dd"));
这可能发生在cmd.ExecuteNonQuery();
或随后的查询中。您可以通过在断点后单步执行来验证这一点。SQL中可能有错误。您可以通过查看内部错误或在MySQL Workbench上尝试查询来找到它。检查所有参数是否匹配表列,以及所有数据类型是否匹配。
顺便说一下,没有必要在更新语句中分配制裁和DATE_HAPPENED,因为您要求它们在WHERE中相等。