在三层架构中,数据提交问题!(50分)

  • 主题发起人 主题发起人 gxf1681
  • 开始时间 开始时间
G

gxf1681

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各们高手,在三层架构中,如何正确处理事务嵌套提交数据?<br>例如:<br>&nbsp; &nbsp; &nbsp;1,首先在程序代码里启动事务<br>&nbsp; &nbsp; &nbsp;2.然后,在启动事务之后,调用一存储过程,在存储过程中,<br>&nbsp; &nbsp; &nbsp; &nbsp;启动事务,更新表 A 的a1字段,再提交事务<br>&nbsp; &nbsp; &nbsp;3.然后在程序代码里,写代码,更新表 A 的a2字段,<br>&nbsp; &nbsp; &nbsp;4.最后,在程序代码里提交事务<br>&nbsp; &nbsp; &nbsp;问题就出现在当在存储过程中,启动事务更新表A的字段,提交事务之后,在程序通过TClientDataSet控件,写SQL语句,更新表A的某字段就出现进程死锁问题,这在两层架构里完全没问题,在三层架构就出现死锁问题,请高手指点指点一下!!!
 
88888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888
 
这是个漏洞,我的论坛里也有的,版主解决一下吧
 
高手们帮忙指点一下呀,在线等待中....
 
style="word-break:break-all"&gt;
 
呵呵,ClientDataSet的ApplyUpdates绝对是个令人心寒的东东,太脆弱了,反正我现在只是查询统计时考虑用ClientDataSet,输入的话也可用,不过到提交时绝对不碰ApplyUpdates,怕了,自己写SQl直接提交。。。。。。
 
我在程序代码里,是用写SQL语句直接更新的,但出现死锁呀,
 
高手请帮忙解决一下呀,高手都到哪里去了呢????
 
关注一下...............
 
ClientDataSet的ApplyUpdates提交时,ClientDataSet会自动启动一个事出有因务来提交,所以如果你的过程代码中有启用事务,那你必须在过程代码中提交事务。ClientDataSet启动的事务它会自动提交。
 
不是用ClientDataSet ApplyUpdates 来保存数据的,而是这样:<br>ClientDataSet.close ;<br>ClientDataSet.commandtext:='update A set a2 where p0=1'; <br>ClientDataSet.excute ; <br>这样更新,就会现死锁了,
 
高手们,请帮忙解决一下,在线等待你们的回复!!!
 
三层里面最好不要在客户端执行更新表的语句<br><br>还有,三层里面事务是在中间层控制的,不是在客户端控制的<br>如果在中间层里面调存储过程(带事务的),MSDTC会处理好多个事务
 
同意楼上的,把INSERT DELETE UPDATE放到中间层来执行,不要在客户端来做.
 
stuwe你好:我是通过中间层来启动事务的,也就是在客户端访问中间层,再由中间层启动事务的,由于在外面启动了事务,在调用存储过程之后(存储里面也有启动事务,提交事务),访问(仅仅是读取该表数据都死锁)或者更新存储过程更新过的表,就出现死锁了,也就是说,该表被锁定,还未解锁,问题就在这里!
 
存储过程也是在中间层直接调用,客户端只是控制中间层去调用而已
 
具体得看中间层设置的事务类型,<br>某种情况,调用存储过程后中间层就应该提交事务,如果不提交事务,存储过程中提交事务的话表还是会锁的
 
stuwe:咱们交个朋友可以吗? 我的MSN:chandy@nobleits.com 。<br>在中间层启动了事务,调用存储过程更新数据之后,也就是说在存储过程中启动了事务,也提交了事务,中间层还没启动提交事务,访问被更新数据的表,就不能了,该表就被锁了。<br>如果在存储过程不启动事务,也不提交事务,只是更新数据,最后统一由中间层来提交事务,这样在由中间层来提交事务之前访问该被更新数据的表也会出现死锁,但这个表肯定是<br>别的地方也需要访问的!像这种情况,请你帮忙指点一下,该怎么解决这个死锁问题?
 
这个跟Delphi应该没什么直接关系吧<br>你用的是什么数据库
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
744
SUNSTONE的Delphi笔记
S
后退
顶部