事务的使用(sql server 数据库和C#代码)

来自百度百科的解释是:

       事务是访问并可能更新数据库中各种数据项的一个程序执行单元。

事物的特性

       事务是恢复和并发控制的基本单元。

       事务应该具有四个属性:原子性、一致性、隔离性、持久性。

原子性:一个事务是一个不可分割的工作单位,事务中包括的各项操作要么都做,要么都不做。

一致性:事务必须使数据库从一个一致性状态变到另一个一致性状态。一致性和原子性是密切相关的。

隔离性:一个事务的执行不能被其他事务干扰,也就是说一个事务执行过程中所做的内部操作和使用的数据相对其他               并发的事务是隔离的,不能相互干扰。

持久性:一个事务一旦提交,它对数据库中数据的改变应该是永久性的,接下来的其他操作或者故障不应该对其有任何影响。

1、在sql server 数据库中使用事务

begin try

        begin tran

            begin

                update t_card_accountset batchid=up_batchid,up_batchid=null where CARDID=@cardid

            end

            begin

                delete from t_card_serv  where cardid=@cardid

            end

            begin2/

                update t_CARD_BATCHSET NCOUNT=@cardNum-1 WHERE BATCHID=@batchid

            end

            begin

                INSERT T_SERV_DEDLOG(ID,CARDID,DEDTIMES,OPER,MEMO,OPTYPE,C_DATE) values (@maxID+1,@cardid,1,@batchid,'绑定卡的取消',1,getdate())

            end

            commit tran

            set @out_code='0000';

        end try

        begin catch

            rollback tran;

            set @out_code='0002';

        end catch

    END


在try的过程中如果没有报错,出现catch,那么就执行成功,如果出现catch,就rollback tran回滚。



2、在C#代码中使用事务

public static int GetAffectedRecordTrans(string _connectionString,string sql, SqlParameter[] paras)
    {
        SqlConnection con = new SqlConnection(_connectionString);
        try
        {          
            SqlCommand cmd = new SqlCommand(sql, con);
            con.Open();
            cmd.Transaction = con.BeginTransaction();//定义事务
            if (paras != null)
            {
                foreach (SqlParameter para in paras)
                {
                    cmd.Parameters.Add(para);
                }
            }
            try
            {
                int i = Convert.ToInt32(cmd.ExecuteNonQuery().ToString());
                cmd.Transaction.Commit();//执行完成,事务提交
                return i;
            }
            catch (Exception ex)
            {
                cmd.Transaction.Rollback();//中途出错,事务回滚
                throw ex;
            }               
        }
        catch (Exception ex) {
            throw ex;
        }
        finally
        {
            con.Close();
        }
    }






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值