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

C# SQL 事务问题,求大神!!

using (IDbConnection conn = Query.CreateConnection(true))
 {
        int memberId = xxx;
        IDbTransaction trans = conn.BeginTransaction();
        Query.insert(cmd,trans);
       .......
      int totalPoints = xxxx;
       doUpdate(memberId,trans,totalPoints);
}

void doUpdate(int memberId,IDbTransaction trans){
string cmd = "UPDATE [{0}] SET PayPoints = @PayPoints WHERE MemberId = @MemberId";
            int num = Query.Execute(string.Format(cmd, "userTable"), CommandType.Text, trans, new SqlParameter("@PayPoints", totalPoints), new SqlParameter"@MemberId", memberId));
}

代码大概如上,doUpdate之前的INSER UPDATE都没问题。查询相关表数据都正常。但在doUpdate里面的update命令
有时候更新不了。也就是相关的积分日志都写入了。但最后UPDATE总分的时候失败。
例如 已保存这一样一条积分日志
date    memberid pay_points
 2013-10-10  1  100

但最后userTable的PayPoints字段更新不了.用户积分为0

这种现象隔4-5天就出现一次,我快要吐了。求大神解救!! 事务 sql c# --------------------编程问答-------------------- 楼主都没有用事务
另外,update语句估计有问题,估计有些情况未考虑到,否则部分更新时不会失败的
把sql 语句贴出来吧 --------------------编程问答-------------------- --------------------编程问答--------------------
引用 楼主 u012405029 的回复:
using (IDbConnection conn = Query.CreateConnection(true))
 {
        int memberId = xxx;
        IDbTransaction trans = conn.BeginTransaction();
        Query.insert(cmd,trans);
       .......
      int totalPoints = xxxx;
       doUpdate(memberId,trans,totalPoints);
}

void doUpdate(int memberId,IDbTransaction trans){
string cmd = "UPDATE [{0}] SET PayPoints = @PayPoints WHERE MemberId = @MemberId";
            int num = Query.Execute(string.Format(cmd, "userTable"), CommandType.Text, trans, new SqlParameter("@PayPoints", totalPoints), new SqlParameter"@MemberId", memberId));
}

代码大概如上,doUpdate之前的INSER UPDATE都没问题。查询相关表数据都正常。但在doUpdate里面的update命令
有时候更新不了。也就是相关的积分日志都写入了。但最后UPDATE总分的时候失败。
例如 已保存这一样一条积分日志
date    memberid pay_points
 2013-10-10  1  100

但最后userTable的PayPoints字段更新不了.用户积分为0

这种现象隔4-5天就出现一次,我快要吐了。求大神解救!!


整个事力除了那update数据都入库了

而且最后的UPDATE我还特意加了日志存起来

UPDATE [userTable] SET PayPoints = 400 WHERE MemberId = 2528 , changeTime => 2013/10/20 17:11:07 , pointWithExpiress => 100 , result => 1 , orderSn => 1310200004614
UPDATE [userTable] SET PayPoints = 500 WHERE MemberId = 2528 , changeTime => 2013/10/20 17:11:21 , pointWithExpiress => 100 , result => 1 , orderSn => 1310200004615

result => 1  也就是executeNonQUERY时返回的影响行数1..说明命令是应该执行了的.可userTable PayPoints为0 ,郁闷死了 --------------------编程问答-------------------- --------------------编程问答-------------------- 你这事务没处理提交和回滚条件,而且你没try catch catch里面也要回滚事务 --------------------编程问答-------------------- 强烈建议楼主去看一下C#代替数据库实现事务的方式。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,