事务问题:OracleCommand将Transaction设置为与OracleCommand的Connection不一致的那个Connection开启的事务

问题描述

如题,重点看secondCmd,它的Connection设置为新开的一个连接,它的Transaction设置为第一个连接开启的事务,语句执行正常,事务提交正常。但是按照MSDN对Transaction的备注http://msdn.microsoft.com/zh-cn/library/system.data.oracleclient.oraclecommand.transaction(v=vs.110).aspx,如果Transaction属性已设置为特定值,而命令正在执行过程中,则不能设置该属性。如果将该事务属性设置为SqlTransaction对象,而该对象未连接到与SqlCommand对象相同的SqlConnection,那么在下次试图执行语句时将会引发异常。事物提交后仍然能够正常执行语句。请问各位,帮忙分析下,多谢!privatevoidbutton4_Click(objectsender,EventArgse){/**事务问题:OracleCommand将Transaction设置为与OracleCommand的Connection不一致的那个Connection开启的事务,竟然能够正常提交。*MSDN对OracleCommand.Transaction属性的备注:如果Transaction属性已设置为特定值,而命令正在执行过程中,则不能设置该属性。//如果将该事务属性设置为SqlTransaction对象,而该对象未连接到与SqlCommand对象相同的SqlConnection,那么在下次试图执行语句时将会引发异常。*/stringstrCon="DataSource=xyhis_rac;UserId=xyhistest;Password=his;";Oracle.DataAccess.Client.OracleConnectionfirstCon=newOracle.DataAccess.Client.OracleConnection(strCon);Oracle.DataAccess.Client.OracleConnectionsecondCon=newOracle.DataAccess.Client.OracleConnection(strCon);OracleCommandfirstCmd=null;OracleCommandsecondCmd=null;OracleTransactionfirstTrans=null;OracleTransactionsecondTrans=null;firstCon.Open();firstTrans=firstCon.BeginTransaction(IsolationLevel.ReadCommitted);firstCmd=newOracleCommand();firstCmd.Connection=firstCon;firstCmd.CommandType=CommandType.Text;firstCmd.CommandText="insertINTOZZ_ZZZvalues('1','1')";firstCmd.Transaction=firstTrans;firstCmd.ExecuteNonQuery();secondCon.Open();//打开第二个连接,开启事务secondTrans=secondCon.BeginTransaction(IsolationLevel.ReadCommitted);secondCmd=newOracleCommand();secondCmd.Connection=secondCon;//Connection设置为第二个连接secondCmd.CommandText="insertINTOZZ_ZZZvalues('2','2')";secondCmd.Transaction=firstTrans;//事务设置为第一个连接开启的事务//secondCmd.Transaction=null;//事务设置为nullsecondCmd.ExecuteNonQuery();try{firstTrans.Commit();//提交肯定没错firstCon.Close();}catch(Exceptionex){MessageBox.Show(ex.Message);}try{secondTrans.Commit();//提交没错secondCmd.ExecuteNonQuery();//继续执行语句也完全正常secondCon.Close();}catch(Exceptionex){MessageBox.Show(ex.Message);}}

时间: 2024-11-02 23:56:05

事务问题:OracleCommand将Transaction设置为与OracleCommand的Connection不一致的那个Connection开启的事务的相关文章

spring-@transactional 会覆盖jboss transaction 设置

问题描述 @transactional 会覆盖jboss transaction 设置 jboss的jboss-service.xml中有一个全局的transaction timeout的设置,同时我在java的类或者方法中用annovation @transational(timeout = 100000)来给相应的事务设置具体的超时时间.全局的jboss的设置超时比较短,只有10分钟.我之前以为我在方法上使用spring的transactional timeout 可以覆盖jboss的全局设

MySQL数据库事务隔离级别介绍(Transaction Isolation Level)_Mysql

数据库隔离级别有四种,应用<高性能mysql>一书中的说明: 然后说说修改事务隔离级别的方法: 1.全局修改,修改mysql.ini配置文件,在最后加上 复制代码 代码如下:  #可选参数有:READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE. [mysqld] transaction-isolation = REPEATABLE-READ 这里全局默认是REPEATABLE-READ,其实MySQL本来默认也是这个级

MySQL事务隔离级别介绍及设置

READ UNCOMMITTED(未提交) 即使没有提交,对其它事务也可见.未提交的数据会引起脏读(Dirty Read). 测试流程: 1.A设置read-uncommitted, start transaction 2.B执行start transaction,修改一条记录, 3.A查询记录,得到了以为正确的记录 4.B回滚. 问题:A读到了B没有提交的记录,也就是脏读. READ COMMITTED(提交读) 一个从开始直到提交之前所做的任何修改对其它事务都是不可见的.两次同样的查询可能会

spring事务回滚只能配在service层吗。为什么我想在Test中添加事务不能进行回滚呢

问题描述 spring事务回滚只能配在service层吗.为什么我想在Test中添加事务不能进行回滚呢 <tx:advice id="txAdvice2" transaction-manager="txManager"> <tx:attributes> <tx:method name="inserttwo*" propagation="REQUIRED"/> </tx:attribut

spring.net事务怎么配置(包括如何设置隔离级别)

问题描述 <db:providerid="dbProviderESS"provider="SqlServer-2.0"connectionString="DataSource=${db.essdatasource};Database=${db.essdatabase};UserID=${db.essuser};Password=$${db.esspassword};minpoolsize=1;maxpoolsize=20000;ConnectTime

事务策略: 高并发策略-学习如何为支持高用户并发性的应用程序实现事务策略

简介:事务策略 系列文章的作者 Mark Richards 将讨论如何在 Java 平台中为具有高吞吐 量和高用户并发性需求的应用程序实现事务策略.理解如何进行折衷将帮助您确保高水平的数据完整性和 一致性,并减少随后开发流程中的重构工作. 我在本 系列 的前几篇文章中所介绍的 API 层 和 客户端编排策略 事务策略是应用于大多数标准业 务应用程序的核心策略.它们简单.可靠.相对易于实现,并且提供了最高水平的数据完整性和一致性. 但有时,您可能需要减小事务的作用域以获取吞吐量.改善性能并提高数据

[MySQL源码] 在复制线程事务提交与更新relay-log.info之间crash导致的复制不一致

--------------- 最近发现一种情况,在xid event和flush_relay_log_info中间crash,可能会导致数据不一致. 即事务提交了,但relay-log.info文件还没更新,这会造成重启crash recovery后事务被重复执行一次. 幸好,在innodb层记录了这些信息.并且Percona也提供了一个选项来利用这些信息. 1.相关全局变量 在trx/trx0sys.c文件中定义了如下变量 最后一个commit的事务的slave信息: trx_sys_mys

谈谈分布式事务(Distributed Transaction)[共5篇]

[第1篇] SOA需要怎样的事务控制方式 在一个基于SOA架构的分布式系统体系中,服务(Service)成为了基本的功能提供单元,无论与业务流程无关的基础功能,还是具体的业务逻辑,均实现在相应的服务之中.服务对外提供统一的接口,服务之间采用标准的通信方式进行交互,各个单一的服务精又有效的组合.编排成为一个有机的整体.在这样一个分布式系统中某个活动(Activity)的实现往往需要跨越单个服务的边界,如何协调多个服务之间的关系使之为活动功能的实现服务,涉及到SOA一个重要的课题:服务协作(Serv

MySQL · 引擎特性 · InnoDB 事务子系统介绍

前言 在前面几期关于 InnoDB Redo 和 Undo 实现的铺垫后,本节我们从上层的角度来阐述 InnoDB 的事务子系统是如何实现的,涉及的内容包括:InnoDB的事务相关模块.如何实现MVCC及ACID.如何进行事务的并发控制.事务系统如何进行管理等相关知识.本文的目的是让读者对事务系统有一个较全面的理解. 由于不同版本对事务系统都有改变,本文的所有分析基于当前GA的最新版本MySQL5.7.9,但也会在阐述的过程中,顺带描述之前版本的一些内容.本文也会介绍5.7版本对事务系统的一些优