TransactionScope et Oracle

Résolu
cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008 - 15 déc. 2006 à 18:22
cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008 - 24 janv. 2007 à 11:43
Bonjour tout le monde !
J'essaye de tester la prise en charge des transactions en C# sous Oracle.
Le problème c'est ma transaction, même volontairement interrompue, n'est pas annulée dans la base de données !
Peut être que je n'utilise pas ce qu'il faut pour l'annuler.

Par exemple :
...
TransactionScope ts = new TransactionScope();
using (ts)
{
 try
 {
   ... [Mise à jour de la base] ...
   throw new Exception("Mon exception");
 }
 catch(Exception ex)
 {
   ts.Dispose(); // Rollback !
  }
}    
...

En sortant de là, les données sont dans la base au lieu d'être "rollbackées" !
Il me semble que sous SQL Server 2005, ce code passe sans problème.
Quelqu'un peut m'aider ?

Merci !

KesKisPas

12 réponses

cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008
24 janv. 2007 à 11:41
Finalement, l'ODP.Net marche sans problème à quelques exceptions près :

La DLL, oramts.dll, fournie avec Oracle est une DLL de debug qui fait 192 Ko. Il faut donc télécharger la DLL de release de 137 Ko qui fonctionne sans problème avec .Net ! C'est étonnant mais plusieurs site confirme cette erreur.
( ex : http://jelle.druyts.net/2006/06/25/UnableToLoadOramtsdllTryTheReleaseVersion.aspx )

Passé ce  premier écueil, il faut penser à utiliser le bon provider, avec dans les chaine de connexion ou dans les using :
Oracle.DataAccess.Client.

Et là, ça marche sans problème, sur un serveur IIS.
Sur le WebDev de VS2005, il arrive que ça plante.

Voilà !

KesKisPas
3
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
16 déc. 2006 à 00:23
Salut,

Et si tu spécifies explicitement la transaction à l'initilisation du TransactionScope ?
Il me semble qu'il y a des cas où on se trouve en "AutoCommit" au lieu d'un "AutoRollback" escompté.

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008
18 déc. 2006 à 10:06
Ah...

Je t'avouerai que je n'ai pas compris ta réponse.

Tu peux m'éclairer davantage ?

Merci .

KesKisPas
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
18 déc. 2006 à 18:34
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008
19 déc. 2006 à 14:25
D'accord !

En fait, j'étais partie dans ce sens mais je ne trouve pas encore de solution.

Je n'ai qu'une seule transaction dans mon programme, et c'est celle là.
A part ça, mes opérations sur les bases sont effectuées par des DataSets...

Pour tester, j'ai ajouté dans ces opérations un DataSet sur une base SQL Server, et en cas de RollBack, seule les modifs sur SQL Server sont annulées, les modifs sur Oracle, elles, sont validées malgré le RollBack...

Je cherche toujours...

KesKisPas
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 déc. 2006 à 15:08
Ok, tiens nous au courant alors ^^

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008
19 déc. 2006 à 18:08
Je crois avoir trouvé la réponse, elle se situe dans la chaine de connexion !

Si la propriété Enlist est à 'true', les transactions sont prises en compte
Sinon, elles sont "ignorées".
Après quelques essais, on dirait que ça vient réellement de là.

A lire la définition, ça "paraît" logique, mais je n'avais pas cherché par là :
http://msdn2.microsoft.com/fr-fr/library/system.data.oracleclient.oracleconnectionstringbuilder.enlist(VS.80).aspx

Voilà !

Si quelqu'un a davantage de précision, je suis preneur, merci.

KesKisPas
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
19 déc. 2006 à 18:19
Bon à savoir.
Si le provider Oracle intégré te pose problème (enfin là ça doit être global), tu as peut être intérêt à regarder du côté de celui fourni par Oracle.

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008
20 déc. 2006 à 09:24
L'ODPNet ? C'est ça ?

KesKisPas
0
cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008
20 déc. 2006 à 10:32
Je regarderai du côté d'ODP.Net parceque je trouve un comportement bizarre avec le serveur Web de Dév de VS2005...

Si je ne détruis pas le serveur entre 2 tests, ma transaction reste bloquée indéfiniment. Donc, quand je testerais sur un vrai IIS, je confirmerai.

Merci en tout cas !

KesKisPas
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
20 déc. 2006 à 18:23
Ouep, l'ODP.NET :-)

/*
coq
MVP Visual C#
CoqBlog
*/
0
cs_keskispas Messages postés 46 Date d'inscription vendredi 11 juillet 2003 Statut Membre Dernière intervention 26 août 2008
24 janv. 2007 à 11:43
Pour info, ce problème de DLL est présent sur les Oracle 9.

Sur les versions ultérieures, je ne sais pas si le problème a été résolu.

KesKisPas
0
Rejoignez-nous