在插入执行期间显示错误消息

时间:2014-10-06 18:19:10

标签: c# mysql user-interaction

如果已经为学生分配了当前插入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();

这是我的虚拟学生表:

enter image description here

这是我的虚拟位置表:

enter image description here

这是我的虚拟候选人表:

enter image description here

这是我的listview控件示例:

enter image description here

1 个答案:

答案 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");
 }