这段代码有什么问题吗?
有时我收到未处理的“无效交易对象”异常:
procedure BlaBla;
var
TD: TDBXTransaction;
begin
TD := SQLConnection.BeginTransaction;
try
SQLConnection.ExecuteDirect('some sql command');
SQLConnection.ExecuteDirect('some sql command');
SQLConnection.CommitFreeAndNil(TD);
except
SQLConnection.RollbackFreeAndNil(TD);
end;
end;
此异常正在向用户提出,因此我假定它由RollbackFreeAndNil提出,因为所有其余部分都在try..except内部。
我应该用另一个try..except包装RollbackFreeAndNil吗?真是一团糟。
我正在使用Delphi 2009,带有Firebird 2.1的DBX和Devart的驱动程序。
最佳答案
如果CommitFreeAndNil抛出异常会怎样?
将调用RollbackFreeAndNil。 TD会有效吗?
您正在吃异常(exception),因此是证据。不要那样做重新抛出:
procedure BlaBla;
var
TD: TDBXTransaction;
begin
TD := SQLConnection.BeginTransaction;
try
SQLConnection.ExecuteDirect('some sql command');
SQLConnection.ExecuteDirect('some sql command');
except
SQLConnection.RollbackFreeAndNil(TD);
raise;
end;
SQLConnection.CommitFreeAndNil(TD);
end;
关于delphi - 为什么有时我会收到 “Invalid transaction object”异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/420022/