sql中的Tran和C#中的TransactionScope介绍

sql 中的Tran 俩种写法

第一种写法 try catch:

Begin TRY
    Begin Tran transaction

        DECLARE @ServiceOrderId INT
        SET @ServiceOrderId=73342
        DECLARE @ErrorCount  INT
        SET @ErrorCount = 0
        --调整积分通订单状态 支付完成
        UPDATE dbo.ServiceOrderNew
        SET OrderStatus = 2,UpdateDate = GETDATE()

        WHERE  ServiceOrderID = @ServiceOrderId

        --调整订单详细
        UPDATE dbo.ServiceOrderNewDetail
        SET DetailStatus = 2
        WHERE ServiceOrderID = @ServiceOrderId 

    Commit Tran transaction
    END TRY
        BEGIN CATCH
    ROLLBACK Tran transaction
END CATCH

第二种写法 用错误积累:

DECLARE @ServiceOrderId INT
SET @ServiceOrderId=73342

BEGIN TRAN  A
        DECLARE @ErrorCount  INT
        SET @ErrorCount = 0
        --调整积分通订单状态 支付完成
        UPDATE dbo.ServiceOrderNew
        SET OrderStatus = 2,UpdateDate = GETDATE()

        WHERE  ServiceOrderID = @ServiceOrderId

        SET @ErrorCount=@ErrorCount+@@error

        --调整订单详细
        UPDATE dbo.ServiceOrderNewDetail
        SET DetailStatus = 2
        WHERE ServiceOrderID = @ServiceOrderId

        SET @ErrorCount=@ErrorCount+@@error
        --付款状态
        UPDATE dbo.ScorePayApply
        SET ApplyStatus = 2
        WHERE  ScorePayApplyID = (SELECT TOP 1 ScorePayApplyID FROM ServiceOrderNewDetail WHERE ServiceOrderID = @ServiceOrderId)

         SET @ErrorCount=@ErrorCount+@@error

         SET @ErrorCount=@ErrorCount+@@error

  IF @ErrorCount=0
      BEGIN
        COMMIT TRAN  A
      END
  ELSE
      BEGIN
        ROLLBACK TRAN  A
      END 

第二 TransactionScope用法

 using (TransactionScope tran = new TransactionScope())
        {
            try
            {
                ServiceItemDataAccess.ServicesConfirmPayment(serviceOrderId, remark, serviceId);
                //提交事务
                tran.Complete();
            }
            catch (Exception ex)
            {
                return ex.ToString();
            }
            finally
            {
                tran.Dispose();
            }
        }

TransactionScope 是一个轻量级的事物,在using中,若程序报错,则自动回滚。tran.Complete();是指程序成功,提交。 tran.Dispose(); 释放和销毁。

时间: 2025-01-18 09:00:41

sql中的Tran和C#中的TransactionScope介绍的相关文章

sql语句中BEGIN TRAN...COMMIT TRAN

BEGIN TRAN标记事务开始 COMMIT TRAN 提交事务 一般把DML语句(select ,delete,update,insert语句)放在BEGIN TRAN...COMMIT TRAN 之间作为一个事务处理 也就是那些语句执行过程中如果遇到错误,无论哪句遇到错误,所有语句都会回滚到BEGIN TRAN之前的状态.sql语句中BEGIN TRAN...COMMIT TRAN

SQL Server 2014新功能 -- 内存中OLTP(In-Memory OLTP)

SQL Server 2014新功能 -- 内存中OLTP(In-Memory OLTP) 概述 内存中OLTP(项目"Hekaton")是一个全新的.完全集成到SQL Server的数据库引擎组件. 对OLTP工作负载访问中在内存中的数据进行了优化.内存中OLTP能够帮助OLTP工作负载实现显著的性能改善,并减少处理时间.表能被视为"内存优化",提升内存中的OLTP功能.内存优化表是完全可事务的.并可以使用Transact-SQL进行访问.Transact-SQL

SQL自连接(源于推荐算法中的反查表问题)

"基于用户的协同过滤算法"是推荐算法的一种,这类算法强调的是:把和你有相似爱好的其他的用户的物品推荐给你. 要实现该推荐算法,就需要计算和你有交集的用户,这就要用到物品到用户的反查表. 先举个例子说明下反查表:甲喜欢的物品有:A.B.C:乙喜欢的物品有:B.E.F:丙喜欢的物品有:A.J.K:而你喜欢的物品是:A.J.M.反查表就是喜欢A物品的有你.甲.丙,喜欢J物品的有你.丙,喜欢M物品的只有你,这就是和你喜欢的物品有联系的用户.有了这个反查表,我们就可以看出和你有关系的用户只有甲和

ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接

原文:ArcSDE for SQL Server安装及在ArcMap中创建ArcSDE连接 安装ArcSDE for SQL Server,最后一步成功后的界面如下: 在ArcMap中创建ArcSDE连接,截图如下:

sql server 获取每一个类别中值最大的一条数据

sql server 获取每一个类别中值最大的一条数据 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 /* 数据如下: name val memo a    2   a2(a的第二个值) a    1   a1--a的第一个值 a    3   a3:a的第三个值 b    1   b1--b的第一个

Sql Server 在已知表中插入、删除、修改某一列操作

--1.向已有表中增加一列 ALTER TABLE TableName ADD ColumnName VARCHAR(20) NULL --2.删除表中的某一列 ALTER TABLE TableName DROP COLUMN ColumnName --3.修改某一列的数据类型 ALTER TABLE TableName ALTER COLUMN ColumnName INT 2.查询当年或者当月的数据 1.查询当年的数据 SELECT * FROM UserInfo WHERE YEAR(R

SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases)

原文:SQL Server 在多个数据库中创建同一个存储过程(Create Same Stored Procedure in All Databases) 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 遇到的问题(Problems) 实现代码(SQL Codes) 方法一:拼接SQL: 方法二:调用模板存储过程创建存储过程: 总结 扩展阅读 参考文献(References) 二.背景(Contexts) 在我的数据库服务器上,同一个实例

从SSMS中复制代码到Word中数字消失--没解决&&Excel连接SQL Server数据库

1.因工作需要需把SSMS中的代码复制到word中,可发现一个问题: 从SQL Server2008的SSMS中复制代码到Word 2013中,如果是中文汉字+阿拉伯数字,阿拉伯数字会消失.如果是英文+阿拉伯数字就没有问题.在网上也没找到方法,问一哥们,他说我们都是英文,没遇到过.记录下来吧 2.每次发的数据都在数据库中,之前都是select * from TableName,然后"连同标题一起复制",然后再粘贴到Excel中.但其实excel可以连接SQL Server的,其实操作很

C#将SQL数据库中数据导入Excel中,并将Excel中反导入SQL数据库中

实际的开发中,我们会经常遇到数据的转化的需要,将Excel中的数据转入到SQL中,或将SQL在数据库表中的数据导入到Excel中.代码如下: Code using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windo