事务的试验

  redo:
            try
            {
                using (TransactionScope ts = new TransactionScope())
                {
                    using (SqlConnection conn = new SqlConnection(...))
                    {
                        conn.Open();

                        DataSet dataSetShangPinKuCun = new DataSet();
                        string select = @"SELECT * FROM ERP_DANJUSUFFIX  WHERE STYLE='TEST'";
                        SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(select, conn);
                        SqlCommandBuilder builder = new SqlCommandBuilder(sqlDataAdapter);
                        sqlDataAdapter.Fill(dataSetShangPinKuCun);

                        Thread.Sleep(1000)

                        DataRow newRow = dataSetShangPinKuCun.Tables[0].Rows[0];
                        newRow["SUFFIX"] = int.Parse(newRow["SUFFIX"].ToString().Trim()) - 1;
                        sqlDataAdapter.Update(dataSetShangPinKuCun);

                        conn.Close();

                    }
                    ts.Complete();
                }
             }
            catch(SqlException ex)
            {
                if (ex.Number == 1205)
                    goto redo;
            }

假设这段代码在两个进程里同时执行
1)都有:using (TransactionScope ts = new TransactionScope())
  进程A将成功,进程B将失败,触发1205错误。
  进程A和进程B互锁,都在等待提交对ERP_DANJUSUFFIX的访问(无论是读或写)

2)都没有:using (TransactionScope ts = new TransactionScope())
  进程A将成功,进程B将失败,进程B尝试执行。
  newRow["SUFFIX"] = int.Parse(newRow["SUFFIX"].ToString().Trim()) - 1;
  newRow["SUFFIX"] 已经不是原来的值了。

3)进程A有:using (TransactionScope ts = new TransactionScope())
  进程B无
  
  假设A先执行,
  A成功,进程B将等待A事务提交,但出现了和2)一样的错误

  假设B先执行
  B将成功,A出现了和1)一样的错误;但B也可能失败,出现和1)一样册错误。
 
4)假设进程B只是读操作,进程A不会象1)中对待在事务中的进程B一样,一定要等待它
提交,才能自己继续。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值