为了说明白写的比较长,请耐心看完奥,呵呵。
客户端A通过应用程序读取一条数据信息,将数据信息显示在界面上欲进行修改.在A点击修改提交按钮之前,另一客户端B通过同一应用程序只允许查看同一条数据信息,而不允许进行修改操作,防止产生脏数据.
这个问题用sqlserver本身的锁机制是不能解决的,我现在的解决办法是在数据表中加一列表示锁定标识,A在读取数据后,添加锁定标识,在A正常修改数据、或正常退出、或状态过期后进行解锁,保证B不会进行修改操作.但问题是如果A客户端异常中断时,此数据就会产生死锁,虽然可以在服务器端可定时针对这样的数据进行统一解锁,但统一解锁之前这条数据还是处于死锁状态。
请大家说说关于这种数据锁定问题的解决办法。

解决方案 »

  1.   

    mssql锁机制是自动的,当然你也可以自己写事务处理
      

  2.   

    添加一个表temp,
    用户A读取向temp里添加一条记录,记录A所访问的表及访问时间
    如果此时B也访问A相同表时,因为A已经在temp添加记录了,所以B不向temp添加记录,此时也可以提示B有人在操作
    也就是说同一个表在temp表里只有一条记录A修改或删除时,temp有他的记录则他可以执行,执行后删除temp里记录,在记录删除之前B则无权设置一个自动过期时间,在此期间A如果有继续访问或执行此表,则更新访问时间,过期则自动删除temp表里记录
    此时A,B哪个先访问哪个则获得权限在sql里添加一个作业定时(比过期时间短一点点)执行,判断temp表,如果当前时间-访问时间大于过期时间,则自动清除此记录(断电时最大等待一个过期时间)
      

  3.   

    其实lz你自己有没有考虑一个并发的情况,a和b同时访问未访问的记录了?
      

  4.   

    tang5399 其实你的解决办法和我的是一样的,还是存在缺陷的.
      

  5.   

    tang的想法楼主已经想过了,可以这样说,这样的锁问题是不能得到良好的解决,可以考虑客户端在使用某条数据的时候每隔5秒就更新一下数据库相应记录的过期时间