事务处理

ALTER PROCEDURE [dbo].[KX卡项_Delete]
@卡项编号 varchar(20)
 AS 
SET NOCOUNT ON--不返回计数(表示受 Transact-SQL 语句影响的行数)。
SET XACT_ABORT ON--如果 Transact-SQL 语句产生运行时错误,整个事务将终止并回滚。

declare
  @ErrorMessage varchar(1000)

BEGIN TRY  
  BEGIN TRANSACTION
    DELETE KX卡项绑定项目 WHERE 卡项编号=@卡项编号
	DELETE [KX卡项]	 WHERE 卡项编号=@卡项编号
  COMMIT TRANSACTION
END TRY
BEGIN CATCH
    ROLLBACK TRANSACTION
 SELECT @ErrorMessage=ERROR_MESSAGE() RAISERROR (@ErrorMessage,16,1) END CATCH



结论:我们应该在存储过程的头部加上SET NOCOUNT ON 这样的话,在退出存储过程的时候加上 SET NOCOUNT OFF这样的话,以达到优化存储过程的目的。

/// <summary>
        ///  更新一条数据
        /// </summary>
        public void Update(List<SellRangeInfo> list)
        {
            Database db = DatabaseFactory.CreateDatabase();
            DbCommand deleteCommand = db.GetStoredProcCommand("SY销售范围_Delete");
            //事务处理,先从列表中清除有关当前编号的信息,然后添加有关些编号的新的禁止信息
            //SY销售范围_Delete,SY销售范围_ADD

            db.AddInParameter(deleteCommand, "商品类别", DbType.Int16, list[0].商品类别);
            db.AddInParameter(deleteCommand, "编号", DbType.String, list[0].编号列表);

            using (DbConnection connection = db.CreateConnection())
            {
                connection.Open();
                DbTransaction transaction = connection.BeginTransaction();
                try
                {
                    db.ExecuteNonQuery(deleteCommand, transaction);
                    foreach (SellRangeInfo model in list)
                    {
                        DbCommand insertSellRange = db.GetStoredProcCommand("SY销售范围_ADD");
                        db.AddInParameter(insertSellRange, "商品类别", DbType.Int16, model.商品类别);
                        db.AddInParameter(insertSellRange, "会所编号", DbType.String, model.会所编号);
                        db.AddInParameter(insertSellRange, "编号", DbType.String, model.编号列表);
                        db.ExecuteNonQuery(insertSellRange, transaction);
                    }
                    transaction.Commit();
                }
                catch(Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
                 finally
                {
                    connection.Close();
                }
            }
        }


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值