多次插入相同的记录

时间:2013-05-16 14:29:55

标签: asp.net sql sql-server gridview

每当我将记录插入数据库时​​,记录将被添加3次。

try
{
   con.Open();

   object addedkey = cmd.ExecuteScalar();

   if ((addedkey != null && (addedkey != DBNull.Value)))
   {
      addedkey = Convert.ToInt32(cmd.ExecuteScalar());
   }

   added = cmd.ExecuteNonQuery();

   lblResult.Text = added.ToString() + " record opgeslagen.";
   lblResult.Text = addedkey.ToString();
}

但是当我评论ExecuteScalarExecuteNonQuery时,一切正常。因此,如果我注释掉其中一个,那么记录将被插入两次。

这是在我添加了一个删除按钮后开始发生的,该按钮与insert命令无关。

有谁知道造成这种情况的原因是什么?

提前致谢。 :)

2 个答案:

答案 0 :(得分:4)

每次在命令上运行'Execute ...()'方法时,您都在执行插入操作。您在代码中运行它三次,因此您插入3x记录。

    object addedkey = cmd.ExecuteScalar(); //you run the insert command here
    if ((addedkey != null && (addedkey != DBNull.Value)))
    {
        addedkey = Convert.ToInt32(cmd.ExecuteScalar());//you run the insert command here
    }
    added = cmd.ExecuteNonQuery();//you run the insert command here
    lblResult.Text = added.ToString() + " record opgeslagen.";
    lblResult.Text = addedkey.ToString();

答案 1 :(得分:0)

你执行了3次。实际上,您需要在第一次执行后重构代码。

您可以更改

addedkey = Convert.ToInt32(cmd.ExecuteScalar());

到此 - 这将阻止第二次执行:

addedkey = Convert.ToInt32(addedKey);

并改变这一点:

added = cmd.ExecuteNonQuery();

到此 - 这将阻止第三次执行(假设added是一个int,并且是执行的返回。

added = addedKey;

如果added实际上是boolean,请将其设置在if内,因为它会通过您的if声明进行验证

{
    addedkey = Convert.ToInt32(addedKey);//you run the insert command here
    added = true;
}