事务处理

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();
                }
            }
        }


 

你可能感兴趣的:(事务处理)