/* 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;
}
}
}