You are adding multiple times the same parameters in every iteration of loop.
Add rwd.command.Parameters.Clear()
after each loop iteration:
for (long counter = from; counter <= to; counter++)
{
rwd.command.Parameters.Clear();
string upd = "update card set LockState=@lockstate, card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;
rwd.command.Parameters.Add(new SqlParameter("@LockState",
SqlDbType.NVarChar)).Value =1;
rwd.command.Parameters.Add(new SqlParameter("@card_descr",
SqlDbType.NVarChar)).Value = txt_desc2.Text;
rwd.connection.Open();
rwd.command.ExecuteScalar();
rwd.connection.Close();
}
or add parameter before loop:
rwd.command.Parameters.Add(new SqlParameter("@LockState", SqlDbType.NVarChar));
rwd.command.Parameters.Add(new SqlParameter("@card_descr", SqlDbType.NVarChar));
and then in loop:
for (long counter = from; counter <= to; counter++)
{
string upd = "update card set LockState=@lockstate,
card_descr=@card_descr where [cardNumber] = N'{0}'";
rwd.command.CommandText = upd;
rwd.command.Parameters["@LockState"].Value =1;
rwd.command.Parameters["@card_descr"].Value = txt_desc2.Text;
rwd.connection.Open();
rwd.command.ExecuteScalar();
rwd.connection.Close();
}