当前位置:编程学习 > C#/ASP.NET >>

为什么的我的SqlHelper.ExecuteNonQuery会有重复执行?

我查执行后的记录,发现业绩工资重复加了,比如说今天应该加10元,他加了20元。可以保证在数据库中可发放的工资没有重复,已经两天了,在大约200多人中,每次都是有2个人的工资重复加了,而且是不同的人,好像是随机的,各位大侠,帮我找找原因吧,谢谢。

 int Money;
        DateTime S_Begin = DateTime.Now;

        //查询所有可发放的工资
        DataSet ds = SqlHelper.ExecuteDateSet(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, "select (Wage_Temp_Money*Wage_Temp_Tax) as Money,Wage_Temp_User_Id,User_TuJian from [Wage_Temp] inner join [User] on Wage_Temp_User_Id=User_Id where datediff(day,getdate(),Wage_Temp_Date_End)>0 order by Wage_Temp_Id", null);

        for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
        {
            Money = 0;
            Money = Convert.ToInt32(ds.Tables[0].Rows[i]["Money"]) * Days;

            //更新业绩工资
            SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, "update [User] set User_Dzb=User_Dzb+" + Money + " where User_Id=" + ds.Tables[0].Rows[i]["Wage_Temp_User_Id"].ToString(), null);

            //更新直推工资
            SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, "update [User] set User_Dzb=User_Dzb+" + Money + "*0.2 where User_Id=" + ds.Tables[0].Rows[i]["User_TuJian"].ToString(), null);
        }
--------------------编程问答-------------------- 是不是按钮点击了2次啊 --------------------编程问答-------------------- 你应该像这里的回帖的功能,点击一次按钮不可再点 --------------------编程问答--------------------
引用 2 楼  的回复:
你应该像这里的回帖的功能,点击一次按钮不可再点
--------------------编程问答-------------------- ds 里某个人重复了
--------------------编程问答-------------------- 要么跟触发事件有关系。比如触发了两次。或者这个方法被调用了两次。
要么是你查询语句查出的结果中本来就有重复的数据之类的。 --------------------编程问答-------------------- 我是放在ISPosback里的,肯定是执行了一次,不然的话,其它人的工资了加了两次了 --------------------编程问答-------------------- ds查询出来的结果,我也对过,没有重复的,如果有重复的话,那明天重复加的那个人也是今天重复加的人才对,可是昨天复杂加的人和今天重复加的人不是同两个人,所以觉得非常奇怪,望大侠们看看 --------------------编程问答--------------------  ds.Tables[0].Rows 判断下它的状态? --------------------编程问答--------------------
引用 1 楼  的回复:
是不是按钮点击了2次啊

楼主先照着这个解决下看看吧,应该是这个原因 --------------------编程问答--------------------  //更新业绩工资
            SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, "update [User] set User_Dzb=User_Dzb+" + Money + " where User_Id=" + ds.Tables[0].Rows[i]["Wage_Temp_User_Id"].ToString(), null);

            //更新直推工资
            SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, "update [User] set User_Dzb=User_Dzb+" + Money + "*0.2 where User_Id=" + ds.Tables[0].Rows[i]["User_TuJian"].ToString(), null);



这两句你合并成一个SQL执行! --------------------编程问答--------------------
引用 10 楼  的回复:
//更新业绩工资
  SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, "update [User] set User_Dzb=User_Dzb+" + Money + " where User_Id=" + ds.Tables[0].Rows[i]["Wage_Temp……


这两个句话执行的是不同的用户ID,不好归并,就是归并了怕是对这个问题无济于事吧 --------------------编程问答-------------------- 既然ds没有重复  那么就是说明SqlHelper.ExecuteNonQuery(SqlHelper.ConnectionStringLocalTransaction, CommandType.Text, "update [User] set User_Dzb=User_Dzb+" + Money + " where User_Id=" + ds.Tables[0].Rows[i]["Wage_Temp_User_Id"].ToString(), null);
语句多执行了2两次,而且是随机的   可以不可以把SqlHelper.ExecuteNonQuery函数贴出来 --------------------编程问答-------------------- 还有一种可能就是  ds中已经有Money 值  出错了 --------------------编程问答-------------------- 既然你无法判断哪里出问题了 那就断点调试吧 这功能不能浪费掉 虽然浪费的时间比较多 但至少可以找到问题关键 --------------------编程问答-------------------- update语句拼在一起 执行一个就行了.

/////////////////////////
500人淘宝客交流QQ群:185781220
补充:.NET技术 ,  ASP.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,