时间戳 更新锁

/* oracle */


//获取时间戳
	public string GetTimeStamp(string id)
        {
            string strSql = "SELECT TO_CHAR(TIMESTAMP) TIMESTAMP FROM T_LOANAPPLY WHERE ID=@0 FOR UPDATE WAIT 1";
	    string result = null;
	    using (var trans = dbProvider.GetTransaction()) 
	    { 
	        try 
	        { 
		    result = dbProvider.ExecuteScalar<object>(strSql, id).ToString(); 
		    trans.Commit(); 
	        } 
	        catch 
	        {
	 	    trans.Rollback();
		    throw; 
	        } 
	    }
	    return result; 
	}



//更新时间戳
        public bool UpdateTimeStamp(string id, string timeStamp)
        {
            string strSql = "UPDATE T_LOANAPPLY SET TIMESTAMP=SYSTIMESTAMP WHERE ID=@0 AND TIMESTAMP=@1";

	    bool flag = false;
	    using (var trans = dbProvider.GetTransaction()) 
	    { 
		try 
		{ 
		    int count = dbProvider.Execute(strSql, id, timeStamp); 
		    trans.Commit(); 
		    if (count > 0) 
		    { 
			flag = true; 
		    } 
		} 
		catch 
		{ 
		    trans.Rollback(); 
		    throw; 
		} 
	    } 
	    return flag; 
	}




using (var trans = d_Generic.BeginTransaction())
{
    try
    {
	// 查询T_LoanApply表指定行的时间戳字段值,并对此行数据加更新锁
	string timeStamp = GetTimeStamp(ID);

	d_Generic.Update(e_TenderRecord);
	d_Generic.Update...;

	// 执行更新时间戳字段
	if (UpdateTimeStamp(ID, timeStamp))
        {
            // 如果更新时间戳字段成功,则执行事务
            trans.Commit();
        }
        else
        {
            // 否则回滚事务
            trans.Rollback();
        }
    }
    catch (Exception ex)
    {
        trans.Rollback();
        throw;
    }
}





public void AddAmount(string id, decimal amount)
{
    // 根据用户Guid标识,查询用户帐户信息,并对该条记录添加更新锁
    string strSqlLock = "select * from t_interestuser r where r.id=@0 FOR UPDATE NOWAIT";

    using (var trans = dbProvider.GetTransaction())
    {
        try
        {
            E_InterestUser eInterestUser = dbProvider.Single<E_InterestUser>(strSqlLock, id);
            eInterestUser.AvlBal += amount;
            dbProvider.Update(eInterestUser);
            trans.Commit();
        }
        catch
        {
            trans.Rollback();
            throw;
        }
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值