請教存儲過程中的事務處理問題.(搞定后放300分!又沉海底了,555,數据庫高人,偶期待你出指.) (5分)

  • 主题发起人 主题发起人 zsjerry
  • 开始时间 开始时间
Z

zsjerry

Unregistered / Unconfirmed
GUEST, unregistred user!
三層結構.怎樣在客戶端執行存儲過程時使用事務控制?
delphi中的代碼如下,
Dm.SocketConnection.AppServer.wz_begin
trans(_resultvalue);
[blue]//中間層方法 [/blue]
with SP_Productdo
begin
Close;
Parameters.ParamByName('@p_number').Value:=dbedit6.Text;
ExecProc;
end;
Dm.SocketConnection.AppServer.wz_rollbacktrans(_resultvalue);[blue] //中間層方法. [/blue] [red]//怎樣才能使調用rollbacktrans后事務回混?[/red]
 
你在中间层处理!
比如dataserver上面采用事务处理,
中间层判断返回参数!,然后中间层根据参数返回信息给终端!
终端就知道了!
 
>>比如dataserver上面采用事务处理,
>>中间层判断返回参数!,然后中间层根据参数返回信息给终端!
>>终端就知道了!
感嘆號少幾個行嗎?[:D]
在存儲過程中我有用事務:
......
begin
Tran
insert into ()........
...
Commit
Go
照你的思路在中間層調用,并由存儲過程返回值,然后對返回值進行判斷是提交還是回混,對吧?
但偶有個地方想不通: 存儲過程返回值是在整個存儲過程執行完成后再返回的,也就是說返回值的時候已經執行過存儲過程中的 Commit 語句提交了.
即然都提交了,那麼再對返回值進行判斷,然后決定是提交還是回混有用嗎?
呵呵,小弟淺見,請你指點.

 
在存儲過程中我有用事務:
......
begin
Tran
insert into ()........
if @@error<>0
begin
select id=1,str='这里错误'
rollback tran
return
end
Commit
Go
你在rollback后面就return 哪里需要到commit后面才返回!
 
多謝dcsdcs,不過還沒解決問題.
其實我跟本不需在存儲過程中捕獲錯誤.
我只要實現以下功能:
1>在客戶端調用存儲過程進行insert update等操作
2>可以在客戶端選擇由存儲過程更改后的數据到底是寫入數据庫還是回混.
 
此題無解!???
方法1>判斷存儲過程的返回值. --->不行
等返回值后都已提交到數据庫了.
方法2>由存儲過程搞定的數据先放在臨時表中,然后在delphi中再倒到cds中去. --->可以
不過就是效率慢了一丁點.
ado有自已的事務,數据庫有自已的事務.他們兩個根本不可以聯手控制事務.
dcsdcs:小弟淺見,參考看看.
 
就是就是
我只要實現以下功能:
1>在客戶端調用存儲過程進行insert update等操作
2>可以在客戶端選擇由存儲過程更改后的數据到底是寫入數据庫還是回混.
当你将参数已经传递给存储过程以后,你就不能阻止存储过程的运行了,
必须等到执行完毕才能返回。
当然你可以作一些标记,然后又修改回去!
昨天断网,所以没有发出来!
 
后退
顶部