例如
1. A 客户 调出一条资料,做了修改,在未保存前
2. B 客户 调出同一条资料,此后 A客户 保存了资料
3. 这时B客户的资料实际上是脏数据,是保存不了的(我用的是开放式并发,即WHERE后比较所有要更新的FIELD)我以前做DBASE程式中解决方法是:A 客户调出资料时,就对该行加锁,那么B 客户只能读数据就不能更改.
我现在用.NET做的多层,后台数据库是ORACLE,ORACLE中好像可以用SELECT FOR UPDATE来加锁,但是我不知道如何用,因为我是用ADAPTER+DATASET方式更新的,SELECT FOR UPDATE好像要搭配事务吧,且如果
A客户用SELECT FOR UPDATE加锁后,网络断了,或一直锁住,不是就成死锁了?这种问题该如何处理?
1. A 客户 调出一条资料,做了修改,在未保存前
2. B 客户 调出同一条资料,此后 A客户 保存了资料
3. 这时B客户的资料实际上是脏数据,是保存不了的(我用的是开放式并发,即WHERE后比较所有要更新的FIELD)我以前做DBASE程式中解决方法是:A 客户调出资料时,就对该行加锁,那么B 客户只能读数据就不能更改.
我现在用.NET做的多层,后台数据库是ORACLE,ORACLE中好像可以用SELECT FOR UPDATE来加锁,但是我不知道如何用,因为我是用ADAPTER+DATASET方式更新的,SELECT FOR UPDATE好像要搭配事务吧,且如果
A客户用SELECT FOR UPDATE加锁后,网络断了,或一直锁住,不是就成死锁了?这种问题该如何处理?
解决方案 »
- C#中怎么实现像VS2008的工具箱一样浮动
- 急~~按日期查找内容,在线等~~~
- 大家来看看,关于net的反射, 我有一个菜单项里面有个叫AAA 的选项, 然后数据库里面存放了一个AAA字符串.............
- 自定义控件的问题~~~
- 用ajax+HttpRequest实现自动搜索
- vs2005中 加密技术是通过什么实现的
- 不同的RadioButton触发后在右边同一块地方会出现不同的DataGrid表,怎样做?在线等!
- 由作者耗时两年,独立完成。专为交流和学习之用。webgame
- VS环境下的C#
- 如何将短文件名转换成长文件名?
- 请哪位朋友帮我解决C#中的一个技术问题,谢谢
- 求一登陆界面程序,(C#+SQL)
A客户用SELECT FOR UPDATE加锁后,网络断了,或一直锁住,不是就成死锁了?这种问题该如何处理?如果是多层的话,直接在数据库端进行加锁就不太适合了,毕竟牵扯一个释放的问题。可是考虑增加标志字段来限制。
看來也只能加個FLAG字段了,不過這樣也有問題,假如更新了這個FLAG的人未保存前斷線了,那其他人不是不能更改了?
比如lastupdatetime,每次更新同时更新这个字段并且以lastupdatetime = ?做为条件,这样只要有人更新过,别人传入的更新无法更新到数据,这时提示用户数据已被其他人修改,需要重新打开才能继续操作
可以通过Version来判断
对于并发部分由用户来确认保存哪一份
可以参考MS出版社的ADO。NET2.0的书
我是想类似于保守式并发一样,即不是更新时才提示用户,而是A用户如果在修改这个记录了,B用户在取出资料时就得到提示只能查看不能更新了,免的B用户录了一大堆数据发现不能更新!!
版本号方法(加时间戳),保存所有值方法 ,都是更新时才处理,能不能在取出数据时就可以知道记录有否被其他人修改呢?