问题描述
如题,重点看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);}}