如果已经为学生分配了当前插入mysql数据库的位置,然后回滚事务,如何显示错误消息?
如果指定了不同的位置,则应继续检查下一行。
以下是我的插入代码:
conn.Open();
MySqlTransaction mt = conn.BeginTransaction();
try {
for (int cnt = 0; cnt <= lv1.Items.Count - 1; cnt++) {
if (lv1.Items[cnt].SubItems[3].Text == " ")
continue;
string query = "insert into candidate(pid,s_id)values(@pid,@sid)";
MySqlCommand cmd = new MySqlCommand(query, conn);
cmd.Parameters.Add(new MySqlParameter("@pid", lv1.Items[cnt].SubItems[0].Text ));
cmd.Parameters.Add(new MySqlParameter("@sid", lv1.Items[cnt].SubItems[2].Text));
cmd.Transaction = mt;
cmd.ExecuteNonQuery();
}
mt.Commit();
} catch (Exception error) {
MessageBox.Show(error.Message);
mt.Rollback();
}
conn.Close();
这是我的虚拟学生表:
这是我的虚拟位置表:
这是我的虚拟候选人表:
这是我的listview控件示例:
答案 0 :(得分:2)
不要依赖于insert语句中的异常:如果您不插入任何内容,则无需执行回滚。
相反,请检查项目是否已存在,如果不存在则仅插入。如果您需要告诉用户它已经存在,您可以显示消息框。
例如:
// This is just an example; not sure what exact conditions you need
var cmdExists = new MySqlCommand("SELECT 1 FROM candidate WHERE pid = @pid");
cmdExists.Parameters.Add(new SqlParameter("@pid", lv1.Items[cnt].SubItems[0].Text));
if (cmdExists.ExecuteScalar() == DBNull.Value)
{
string query = "insert into candidate(pid,s_id)values(@pid,@sid)";
...
} else {
MessageBox.Show("some error message that makes sense to your user");
}