0

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

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

4

1 回答 1

3

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

您可以在您的 UI 中向您的用户明确表示默认情况下自动提交是打开的,如果关闭,他们可以通过单击工具栏按钮等来关闭,此时您可以使用可以放置在属性或选项页面中的一些选项来调用 Begin Transaction .

这正是我们在查询窗口中使用 Oracle 开发人员工具所做的事情。

另一个可能要研究的事情是匿名 PL/SQL,用于一次发送一个 SQL 语句块。

至于“SET TRANSACTION”,如果您已经完成“BeginTransaction”,我不确定它是否会产生影响,但如果是这种情况,您可以证明该命令不受支持(我们必须在如果是,我们的查询窗口)。

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

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

于 2015-10-15T22:06:56.813 回答