cs_keskispas
Messages postés46Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention26 août 2008
-
15 déc. 2006 à 18:22
cs_keskispas
Messages postés46Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention26 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 ?
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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é.
cs_keskispas
Messages postés46Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention26 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...
cs_keskispas
Messages postés46Date d'inscriptionvendredi 11 juillet 2003StatutMembreDernière intervention26 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à.
cs_coq
Messages postés6349Date d'inscriptionsamedi 1 juin 2002StatutMembreDernière intervention 2 août 2014101 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.