Code Bye

C#根据条件回滚事务

 

有个需求
A 表中的某一组人的年龄之合加起来不能超过300,人数在10-15之间.
 table a
order age name
1         25
2.        30
….
n          xx

现在有个想法是这样
1行    dba.BeginTransaction();// 开始事务
2行    dba.ExecuteNoQuery(insert into a(age,name,team) value(20,xxx,team1);// 插入一条人员记录

3行    int sum=dba.ExecuteNoQuery(“select sum([age]) FROM a group by team1”)// 计算该组人员之合

4行    dba.CommitTransaction();// 提交事务

5行     if(sum>300)
6行          dba.Transaction.Rollback();// 如果大于300了,就回滚,(插入的那条无效)

// 当前的数据库采用了一个封装的库,我在外面是调不到第6行的事务对象的,
那么有什么办法能将”不超过300″的回滚条件传到给第4行的方法里,让它判断是否回滚?

2分
http://zhidao.baidu.com/link?url=zbPjruwhHEbvjg8MMcd9igthHsP3TWbbqMa2jpz20FQiwj8n0NtPvawxVXAdsRcOHLGLFAEPSxuh4ksneQ8LfK
25分
1行    dba.BeginTransaction();// 开始事务
2行    dba.ExecuteNoQuery(insert into a(age,name,team) value(20,xxx,team1);// 插入一条人员记录
3行    int sum=dba.ExecuteNoQuery(“select sum([age]) FROM a group by team1”)// 计算该组人员之合
5行     if(sum>300)
 6行          dba.Transaction.Rollback();// 如果大于300了,就回滚,(插入的那条无效)
4行   else
               dba.CommitTransaction();// 提交事务
这个可行吗,没有提交事务,怎么可以回滚呢
引用 2 楼 ghao0 的回复:

1行    dba.BeginTransaction();// 开始事务
2行    dba.ExecuteNoQuery(insert into a(age,name,team) value(20,xxx,team1);// 插入一条人员记录
3行    int sum=dba.ExecuteNoQuery(“select sum([age]) FROM a group by team1”)// 计算该组人员之合
5行     if(sum>300)
 6行          dba.Transaction.Rollback();// 如果大于300了,就回滚,(插入的那条无效)
4行   else
               dba.CommitTransaction();// 提交事务

自顶一
8分
引用 3 楼 mirror030 的回复:

这个可行吗,没有提交事务,怎么可以回滚呢

Quote: 引用 2 楼 ghao0 的回复:

1行    dba.BeginTransaction();// 开始事务
2行    dba.ExecuteNoQuery(insert into a(age,name,team) value(20,xxx,team1);// 插入一条人员记录
3行    int sum=dba.ExecuteNoQuery(“select sum([age]) FROM a group by team1”)// 计算该组人员之合
5行     if(sum>300)
 6行          dba.Transaction.Rollback();// 如果大于300了,就回滚,(插入的那条无效)
4行   else
               dba.CommitTransaction();// 提交事务

提交了就没办法回滚了,回滚就是在提交前回滚的

引用 5 楼 jjkk168 的回复:

提交了就没办法回滚了,回滚就是在提交前回滚的

提交之前的那些查询语句是可以得到值的?我一直以为提交之前,这些语句都不会执行?

5分
不提交也可以查出数据的,自己可以测试下
引用 7 楼 genzhu_li 的回复:

不提交也可以查出数据的,自己可以测试下

哦.,如果不合要求,那不提交事务.然后直接关闭数据库吗,那样的话之前执行的SQL会不会有效?


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C#根据条件回滚事务