在使用ODP.NET时,有简单的方法禁用自动提交吗?我希望使用SET TRANSACTION命令启动事务,而不是使用Connection.BeginTransaction或TransactionScope。此外,我希望任何DML启动事务(如果尚未启动),但在发出提交命令之前不要提交更改。我知道其他Oracle (JDBC或Devart)支持这一点,但我希望在ODP.NET中实现同样的行为。
我还发现,在托管版本的ODP.NET中,可能有私有字段控制它,但它隐藏在物理连接的实现中,这很难通过OracleConnection实例访问。在非托管版本中,此设置似乎也在Oracle.DataAccess.dll程序集之外。
发布于 2015-10-15 22:06:56
禁用ODP.NET自动提交的唯一方法是使用BeginTransaction/新TransactionScope。
您可以向UI中的用户表明,默认情况下自动提交是打开的,如果通过单击工具栏按钮等,用户可以关闭自动提交,此时您可以使用属性或选项页中的一些选项调用Begin事务。
这正是我们在查询窗口中使用Oracle开发工具所做的事情。
另一个可能的问题是匿名PL/SQL,它可以同时发送一个SQL语句块。
至于"SET TRANSACTION",我不确定如果您已经执行了"BeginTransaction“,它是否会产生效果,但是如果是这样的话,您可以记录不支持这个命令(如果是这样的话,我们必须在查询窗口中这样做)。
如果您希望在将来的某个时候使用此特性增强ODP.NET,您可能希望在ODP.NET功能请求页面上提交一个请求:
http://apex.oracle.com/pls/apex/f?p=18357:46
https://stackoverflow.com/questions/33142872
复制相似问题