我在.NET 4.0下使用Npgsql 2.0.11来修改PostgreSQL 9.0数据库。该程序对数据库进行了许多修改,全部在单个事务中进行。Npgsql不会在失败的命令后提交事务
在提交之前,我运行SELECT语句,有时会失败(例如,超时)。我吞下异常并继续并提交交易。没有错误,所以看起来好像一切正常,但实际上数据库根本没有修改!
我的猜测是失败的SELECT回滚了整个事务。我是否可以防止这种情况(即让事务仍然提交)或者至少检测到这种情况并抛出异常,以便用户知道提交失败?
我知道在这种特殊情况下,我可以将SELECT移到事务之外,但我更关心解决这个问题的一般情况。提交不提交是一个非常严重的问题,我想确保它不会被检测到。
如果发生错误,事务回滚并AFAIK(我使用另一个ADO.NET提供程序 - 不确定这适用于Npgsql,但是)连接显示“InTransaction == false”之后...所以被调用提交只是在一个“空的交易”... – Yahia
没有'InTransaction',我可以在Npgsql中看到。你使用什么提供商? – EMP
我使用Devart(商业版)中的一个...方法InTransaction是我的代码中的东西...它基于Connection对象的TransactionStateChanged事件的实现... – Yahia