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すべてが正常に機能します。したがって、2 つのうちの 1 つをコメントアウトすると、レコードが 2 回挿入されます。

これは、挿入コマンドとは関係のない削除ボタンを追加した後に発生し始めました。

誰がこれを引き起こしているのか知っていますか?

前もって感謝します。:)

4

2 に答える 2

4

コマンドで「Execute...()」メソッドを実行するたびに、挿入を実行しています。コード内で 3 回実行すると、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());

これに-これにより、2回目の実行が防止されます。

addedkey = Convert.ToInt32(addedKey);

これを変更します:

added = cmd.ExecuteNonQuery();

addedこれに-これにより、3回目の実行が防止されます(これはintであり、実行の戻りであると想定しています.

added = addedKey;

addedが実際にある場合は、ステートメントによって検証されるためboolean、内部に設定しますifif

IE

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