EMP*_*EMP 3 .net sql postgresql transactions npgsql
我在.NET 4.0下使用Npgsql 2.0.11来修改PostgreSQL 9.0数据库.该程序在一个事务中对数据库进行了许多修改.
在提交之前,我运行SELECT语句,有时会失败(例如,超时).我吞下了异常并继续进行交易.没有错误,所以看起来好像一切正常,但实际上数据库根本没有修改!
我的猜测是失败的SELECT回滚整个事务.我可以阻止这种情况(即,事务仍然提交)或者至少检测到这种情况并抛出异常,因此用户知道提交失败了吗?
我知道在这个特定情况下我可以在事务外部移动SELECT,但我更关心的是解决这个问题.提交不提交是一个非常严重的问题,我想确保它不会被检测到.
我对Npgsql一无所知,但我可以谈谈PostgreSQL的行为.当PostgreSQL事务中发生任何错误时,事务将被标记为无效,直到它被关闭.(他们的术语是"中止",我认为这是误导性的.)此外,这是恕我直言,如果你COMMIT是一个无效的交易,它"成功",但具有相同的效果ROLLBACK.您可以在psqlREPL中观察到这一点; 它将ROLLBACK根据您的COMMIT命令打印,但不会发出错误信号.
你可以SAVEPOINT在决赛前创造一个权利SELECT.如果失败,则ROLLBACK转到保存点名称; 这将使您退出无效状态,并允许您提交事务的前一部分.
| 归档时间: |
|
| 查看次数: |
4310 次 |
| 最近记录: |