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