你要锁定一行可以使用悲观锁,即查询的时候使用 select ... for update,在一个事务中进行操作即可。也可以使用乐观锁,即需要个版本字段,更新一次就加一,每次更新之前做对比,即可解决。

解决方案 »

  1.   

    谢谢楼上.
     
    我本来也是想用悲观锁, 使用ISession的方法Lock
    ISession session;
    session.Lock(obj, LockMode.Upgrade)
    本进程内, 再获取改对象的锁定状态session.GetCurrentLockMode(obj); 确实是LockMode.Upgrade.  
    但是另一个进程, 就一直是LockMode.NONE看文档, 这个锁好像是数据库的,通过for update实现, 但为什么对其他进程无效呢?
      

  2.   

    这个锁好像是数据库的,通过for update实现, 但为什么对其他进程无效呢?
    可能是其他的进程并没有访问 你 for update 的那条记录 。 就不会被锁上。
      

  3.   

    我测试用的表只有一条记录. 读出来查看属性是正确的.  实在找不出是什么原因了.  难道是Access不支持对行的悲观锁?