摘要:在软件开发和数据库操作中,经常出现需要共同进退的情况,要么一起成功,要么一起失败。 假设案例: A向B转账3000元rmb。 update Account set Amount=Amount-3000 where name=a update account set Amount=Amount+3000 where name=b 场景: 假设在第1
摘要:在软件开发和数据库操作中,经常出现需要共同进退的情况,要么一起成功,要么一起失败。
假设案例:A向B转账3000元rmb。 update Account set Amount=Amount-3000 where name='a' update account set Amount=Amount+3000 where name='b' 场景:假设在第1行代码执行成功,第2行代码还未执行的情况下。未继续执行。 结果:A的钱没了!B没收到钱!此时推荐使用分布式事务来解决这类问题。
解决方案 应该实现原子性:要么全部成功、要么全部失败(回滚)//包起来就会两者一起。一起成功,或者一起失败 using(TransactionScope ts=new TransactionScope()) { "update Account set Amount=Amount-3000 where name='a'";//从A账户扣钱的操作 "update account set Amount=Amount+3000 where name='b'"//向B账户增加钱的操作 ts.Complete();//忘记这句话,两个都插入失败 }