ODP.NET - 禁用自动提交

时间:2015-10-15 07:52:36

标签: c# oracle transactions odp.net odp.net-managed

使用ODP.NET时,有一种简单的方法可以禁用自动提交吗?我想使用SET TRANSACTION命令启动事务,而不是使用Connection.BeginTransaction而不使用TransactionScope。此外,我想要任何DML启动事务(如果尚未启动)但不提交更改,直到我发出COMMIT命令。我知道其他Oracle提供程序(JDBC或Devart)支持这一点,但我想用ODP.NET实现相同的行为。

我还发现私有字段可能在ODP.NET的托管版本中控制它,但它隐藏在物理连接的实现中,这很难通过OracleConnection实例访问。它似乎在非托管版本中,此设置在Oracle.DataAccess.dll程序集之外。

1 个答案:

答案 0 :(得分:3)

使用ODP.NET禁用自动提交的唯一方法是使用BeginTransaction / new TransactionScope。

您可以在UI中向用户明确默认情况下启用自动提交,并且可以通过单击工具栏按钮等关闭它们,此时您可以使用可以放置在属性中的某些选项调用Begin Transaction或选项页面。

这正是我们在查询窗口中对Oracle Developer Tools所做的工作。

另一个可能的问题是用于一次发送一个SQL语句块的匿名PL / SQL。

对于" SET TRANSACTION",如果你已经完成了" BeginTransaction"我不确定它是否会产生影响。但如果是这种情况,您可以记录不支持此命令(如果是这样,我们必须在查询窗口中执行相同操作)。

如果您希望在将来某个日期使用此功能增强ODP.NET,您可能需要在ODP.NET功能请求页面上提出请求:

http://apex.oracle.com/pls/apex/f?p=18357:46