请问如何在.Net下实现对数据库的同步访问?
例如,2个用户同时在线,并且操作同一个功能模块的同一条记录,其中用户A已经进入该记录的修改页,与此同时用户B却在A用户还未完成修改就将该记录删除。本人按上述情况做了一个实验,结果是修改后返回主浏览页面,用户A不能找到其修改的记录。现在的要求是,在用户A进行修改操作时,用户B不能对其进行删除,直至A完成修改操作。如何控制这里的并发访问?
例如,2个用户同时在线,并且操作同一个功能模块的同一条记录,其中用户A已经进入该记录的修改页,与此同时用户B却在A用户还未完成修改就将该记录删除。本人按上述情况做了一个实验,结果是修改后返回主浏览页面,用户A不能找到其修改的记录。现在的要求是,在用户A进行修改操作时,用户B不能对其进行删除,直至A完成修改操作。如何控制这里的并发访问?
或者按 Knight94(愚翁) 的说法,在数据库中加一个字段,用来标志该纪录的操作状态。
可以在A进入时,给数据加锁,这时B就不能访问了,A完成后再解锁,B才能访问。
update 语句
commit
这样,在A完成改变标志字段之前,B是进不来的。
update 自动就是带锁的,select语句也可以加锁,比如在一个显式事务中,执行select * from 表名 with (tablockx)
这样即可锁住这个表,在事务提交或回滚之前,其他人是不能使用的,所以,这种操作必须要快,否则长时间的锁表,就会影响你的系统的运行效率。
即使不用显式事务,而只是一条update语句,update也不会被另一个用户中断
这个方法理论上是可行的在数据库中加一个字段,用来标志该纪录的操作状态。比如是UpdateLock 0,1但A用户点击修改的时候,就触发一个动作,把相应的UpdateLock改为1这样B用户删除的时候,看加个条件,看看这条记录的UpdateLock 是否为 0为0的就执行删除语句为1的就告诉B用户,改记录正在被修改,无法删除最后等A用户修改完成后把UpdateLock 设置为 0这样就应该解决问题了