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