0

每当我将一条记录插入我的数据库时,该记录就会被添加 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();
}

但是当我发表评论ExecuteScalar并且ExecuteNonQuery一切正常时。所以如果我注释掉两者之一,记录将被插入两次。

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

有谁知道是什么原因造成的?

提前致谢。:)

4

2 回答 2

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();
于 2013-05-16T14:33:23.783 回答
0

你正在执行 3 次。所以真的,你需要在第一次执行后重构代码。

你可以改变

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

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

addedkey = Convert.ToInt32(addedKey);

并改变这个:

added = cmd.ExecuteNonQuery();

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

added = addedKey;

如果added实际上是 aboolean然后将其设置在您的内部if,因为它将已通过您的if语句进行验证

IE

{
    addedkey = Convert.ToInt32(addedKey);//you run the insert command here
    added = true;
}
于 2013-05-16T14:40:03.740 回答