2017-12-03 257 views
-2

的等效性我正在研究一個.Net Razor網頁,我想知道如何阻止讀取註冊表(以前我在AdO中使用AdLockOptimistic),直到更新完成,我的代碼是...AdLock在剃刀頁

 var sqlLeeUsr = "SELECT UsrSmlla FROM tbUsr WHERE ([email protected])"; 
     var usr = db.QuerySingle(sqlLeeUsr, intUsrNro); 
     if (usr != null) 
     { 
      intSecuencia = usr.UsrSmlla + 1; 

      var sqlModUsr = "UPDATE tbUsr SET [email protected] FROM tbUsr WHERE ([email protected])"; 
      db.Execute(sqlModUsr, intSecuencia, intUsrNro); 
     } 
+0

'我想知道如何阻止讀取註冊表(以前我在ADO中使用過AdLockOptimistic)'我不明白你的意思。這種情況下的「註冊表」是什麼?你的代碼現在做什麼?你想要它做什麼呢? – mjwills

+0

我只想管理表tbUsr中的併發。我從這個表(tbUsr)中取出最後一個序列(UsrSmlla),然後給這個序列加上1,並保存在intSecuencia中,最後我用intSecuencia中的值更新字段UsrSmlla。我希望其他人在上一個過程完成時能夠訪問相同的註冊表。 –

+0

請參閱AdLockOptimistic在... https://www.w3schools.com/asp/prop_rs_locktype.asp –

回答

0

,而不是查詢的值,然後遞增它,你應該在一個做了兩次手術。那樣的話,每次調用都會肯定得到一個唯一的值。

要執行的代碼可能是:

var sqlLeeUsr = "UPDATE tbUsr SET UsrSmlla=UsrSmlla+1 
    FROM tbUsr 
    OUTPUT INSERTED.UsrSmlla 
    WHERE ([email protected])"; 
var changed = db.QuerySingle(sqlLeeUsr, intUsrNro); 

這將更新表並返回新(增量)值。