2010-08-16 5 views
2

Mon système écrit des données dans une base de données SQL Server (2008), les extrait plus tard et les traite un peu plus avant de les écrire dans une base de données Oracle (10g).Utilisation de TransactionScope avec System.Data.OracleClient - TransactionAbortedException

J'ai encapsulé mes interactions SQL Server dans un TransactionScope mais quand j'essaye la même chose avec mes interactions Oracle, j'obtiens un `TranactionAbortedException -" La transaction a avorté ". Supprimez le TransactionScope et tout fonctionne correctement.

Je pourrais toujours revenir à la gestion manuelle de mes propres transactions, mais j'espère qu'il existe une solution simple.

Exemple de code:

private static void OracleTest() 
    {   
     using (TransactionScope ts = new TransactionScope()) 
     { 
      using (OracleConnection conn = new OracleConnection(connString)) 
      { 
       try 
       { 
        using (OracleCommand cmd = new OracleCommand()) 
        { 
         cmd.CommandText = "MyPackage.MyFunction"; 
         cmd.CommandType = System.Data.CommandType.StoredProcedure; 
         cmd.Connection = conn; 

         OracleParameter param = cmd.Parameters.Add(new OracleParameter("field1_", "abc123")); 

         param = cmd.Parameters.Add(new OracleParameter("rs_", OracleType.Cursor)); 
         param.Direction = System.Data.ParameterDirection.Output; 
         conn.Open(); 
         using (OracleDataReader dr = cmd.ExecuteReader()) 
         { 

Je n'ai pas trouvé quoi que ce soit de suggérer que vous ne pouvez pas utiliser TransactionScopes avec Oracle, mais comme vous pouvez le voir dans mon exemple, nous tombons au premier obstacle (lorsque nous ouvrons la connexion), il est difficile de voir où je pourrais me tromper.

Répondre

Questions connexes