【发布时间】:2016-01-13 13:50:55
【问题描述】:
在使用 ODP.NET 时,是否有一种简单的方法可以禁用自动提交?我想使用 SET TRANSACTION 命令开始事务,而不是使用 Connection.BeginTransaction 和 TransactionScope。此外,我希望任何 DML 启动事务(如果尚未启动)但在发出 COMMIT 命令之前不提交更改。我知道其他 Oracle 提供程序(JDBC 或 Devart)支持这一点,但我想用 ODP.NET 实现相同的行为。
我还发现在 ODP.NET 的托管版本中可能存在私有字段,但它隐藏在难以通过 OracleConnection 实例访问的物理连接的实现中。在非托管版本中,此设置似乎也在 Oracle.DataAccess.dll 程序集之外。
【问题讨论】:
-
不是我的领域,而是: 要执行显式事务,首先通过调用 BeginTransaction 方法从 OracleConnection 对象获取 OracleTransaction 对象。请注意,这是获取交易对象的唯一方法。从这里:http://www.oracle.com/au/products/database/o39odpnet-087387.html
-
这只是简单描述如何使用连接对象上的调用方法来控制事务。我不想要那个。我希望在发布第一个 DML 时不提交事务,而无需使用 BeginTransaction/new TransactionScope 显式启动事务。基本上是默认的 SQL*Plus 行为。
-
你不喜欢
Connection.BeginTransaction有什么原因吗? -
我有自己的 SQL 编辑器,您可以在其中执行任何临时 SQL 命令,如果我想使用 SET TRANSACTION 启动事务,我需要显式检查将要执行的每个命令,如果它是 SET TRANSACTION,我需要在 BeginTransaction 中选择哪个隔离级别作为参数。并不是说该方法不支持只读。当然,实际这样做不是问题,但我不喜欢这样的解决方案。尤其是当其他提供商有 AutoCommit 设置时。
标签: c# oracle transactions odp.net odp.net-managed