关于SQL存储过程事务处理,该如何解决
关于SQL存储过程事务处理
一个存储过程
第一个问题存储过程写的怎么样,还有什么要改进没,谢谢指点
第二个问题我不知道在存储过程用事务处理,在代码中也用事务处理有必要吗
------解决方案--------------------
查询的时候不需要加锁,因为查询是用的共享锁,插入和更新时需要加锁,再者
再insert的时候,改为:insert into C_SENDPRODUCTDETAIL with(updlock)。。。。
第二个问题,如果存储过程中有事务处理,那程序中不需要再加了
------解决方案--------------------
最好在每个对数据库操作的语句后都加上出错判断,另外注意显性事务与隐性事务的区别,
你应该在操作数据之前打开显性事务,结束时关闭
一个存储过程
- MSIL code
CREATE PROCEDURE ProductOrderSplit @SELL_IDSN int, @SplitNumber int AS begin tran declare @SELL_ID varchar(100) declare @OrderNoteSN int [s] sele
- C# code
public int SplitProduct(int SELL_IDSN, int SplitNumber) { SqlConnection sqlConn = HunryCommon.DataAccess.GetConnection(); sqlConn.Open(); SqlTransaction sqlTrans = sqlConn.BeginTransaction(); try { SqlParameter [] commandParameters = new SqlParameter[2]; commandParameters[0] = new SqlParameter("@SELL_IDSN",SqlDbType.Int); commandParameters[0].Value = SELL_IDSN; commandParameters[1] = new SqlParameter("@SplitNumber",SqlDbType.Int); commandParameters[1].Value = SplitNumber; HunryCommon.DataAccess.ExecuteScalar(sqlTrans,CommandType.StoredProcedure,"ProductOrderSplit",commandParameters); sqlTrans.Commit(); sqlConn.Close(); return 1; } catch(SqlException ex) { string ss=ex.ToString(); sqlTrans.Rollback(); sqlConn.Close(); return 0;//有异常 } }
第一个问题存储过程写的怎么样,还有什么要改进没,谢谢指点
第二个问题我不知道在存储过程用事务处理,在代码中也用事务处理有必要吗
------解决方案--------------------
查询的时候不需要加锁,因为查询是用的共享锁,插入和更新时需要加锁,再者
再insert的时候,改为:insert into C_SENDPRODUCTDETAIL with(updlock)。。。。
第二个问题,如果存储过程中有事务处理,那程序中不需要再加了
------解决方案--------------------
最好在每个对数据库操作的语句后都加上出错判断,另外注意显性事务与隐性事务的区别,
你应该在操作数据之前打开显性事务,结束时关闭