首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

关于SQL存储过程事务处理,该如何解决

2012-09-23 
关于SQL存储过程事务处理一个存储过程MSIL codeCREATE PROCEDURE ProductOrderSplit @SELL_IDSN int,@Spli

关于SQL存储过程事务处理
一个存储过程

MSIL code
CREATE PROCEDURE ProductOrderSplit @SELL_IDSN int,@SplitNumber intASbegin trandeclare @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)。。。。

第二个问题,如果存储过程中有事务处理,那程序中不需要再加了
[解决办法]
最好在每个对数据库操作的语句后都加上出错判断,另外注意显性事务与隐性事务的区别,
你应该在操作数据之前打开显性事务,结束时关闭

热点排行