多用户同时操作同一张页面
在网上找过一些资料。比如:如何进行行锁定,如何捕获因“脏读”,“丢失更新”,“非重复读”等并发问题而产生的异常等.但。这张页面设计到了N多张表,并且都有添加删除修改过的功能,要是进行行锁定的话,那不就要设计到N多行啊。
求,有没有简单一点的方法啊。就是多用户同时点保存的时候,去执行一条数据保存,其他用户弹出提示框。
现在只有这么多分求高手解答啊。 数据 并发 异常 asp.net 锁 --------------------编程问答-------------------- 跟页面没关系,数据库自带排它锁。在直行数据存储时,把多张关联表的插入更新等操作都放在一个事务中执行。 --------------------编程问答-------------------- SQL Server 2008多版本并发控制 --------------------编程问答-------------------- 可以给数据加一个updatetime,更新的时候先取出该数据的updatetime,保存时判断updatetime和之前取出的updatetime是否一致,因为如果别人在你之前保存的话会将updatetime改为他保存时的时间 --------------------编程问答--------------------
要是两用户同时保存,时间是一样的不就没效果了啊。 --------------------编程问答--------------------
时间精度高点不就行了~~ --------------------编程问答-------------------- 从用户体验的角度来说,页面通过长连接ajax无刷新地获得别人的修改比较好。
无论你是上锁还是做事务。只是保证程序数据上的同步,但是用户很沮丧地输入了半天,然后被告知,你的数据不被接受。这是没办法靠上锁解决的。 --------------------编程问答-------------------- 无论什么样都有先后顺序,sql server2008用事务处理就可以了,如果同时保存,用事务处理,它也会等另一个事务解锁后它才能执行
--------------------编程问答--------------------
从用户体验的角度来说,页面通过长连接ajax无刷新地获得别人的修改比较好。
无论你是上锁还是做事务。只是保证程序数据上的同步,但是用户很沮丧地输入了半天,然后被告知,你的数据不被接受。这是没办法靠上锁解决的。
事务处理是不是这样:
commit tran
update tbl_lecense_number set product_id=@product_id,productInfo_id=@productInfo_id,number=@number_1967 , number_name=@number_name_1967, number_note=@number_note_1967, deadline=@licenseDeadline_1967, date=@date_1967, readyImg=@ready_1967, designTeam=@designTeam_1967, dropDown=@dropDown_1967,cat=@cat_1967,productMilestones_id=@productMilestones_id_1967 where serial=@licenseId_1967;
update tbl_lecense_number set product_id=@product_id,productInfo_id=@productInfo_id,number=@number_2159 , number_name=@number_name_2159, number_note=@number_note_2159, deadline=@licenseDeadline_2159, date=@date_2159, readyImg=@ready_2159, designTeam=@designTeam_2159, dropDown=@dropDown_2159,cat=@cat_2159,productMilestones_id=@productMilestones_id_2159 where serial=@licenseId_2159;
update tbl_lecense_number set product_id=@product_id,productInfo_id=@productInfo_id,number=@number_2148 , number_name=@number_name_2148, number_note=@number_note_2148, deadline=@licenseDeadline_2148, date=@date_2148, readyImg=@ready_2148, designTeam=@designTeam_2148, dropDown=@dropDown_2148,cat=@cat_2148,productMilestones_id=@productMilestones_id_2148 where serial=@licenseId_2148;
update tbl_lecense_number set product_id=@product_id,productInfo_id=@productInfo_id,number=@number_2151 , number_name=@number_name_2151, number_note=@number_note_2151, deadline=@licenseDeadline_2151, date=@date_2151, readyImg=@ready_2151, designTeam=@designTeam_2151, dropDown=@dropDown_2151,cat=@cat_2151,productMilestones_id=@productMilestones_id_2151 where serial=@licenseId_2151;
update tbl_lecense_number set product_id=@product_id,productInfo_id=@productInfo_id,number=@number_2155 , number_name=@number_name_2155, number_note=@number_note_2155, deadline=@licenseDeadline_2155, date=@date_2155, readyImg=@ready_2155, designTeam=@designTeam_2155, dropDown=@dropDown_2155,cat=@cat_2155,productMilestones_id=@productMilestones_id_2155 where serial=@licenseId_2155;
update tbl_lecense_number set product_id=@product_id,productInfo_id=@productInfo_id,number=@number_2158 , number_name=@number_name_2158, number_note=@number_note_2158, deadline=@licenseDeadline_2158, date=@date_2158, readyImg=@ready_2158, designTeam=@designTeam_2158, dropDown=@dropDown_2158,cat=@cat_2158,productMilestones_id=@productMilestones_id_2158 where serial=@licenseId_2158;
begin tran
开头 和结尾加一个 commit tran 和 begin tran --------------------编程问答-------------------- 总之,你上锁是在提交这个过程中,而不是在用户编辑的整个阶段。
补充:.NET技术 , ASP.NET