Pas de transactions sql avec MyConnector .NET 1.0.6 ?????? [Résolu]

Signaler
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007
-
Bonjour,



Je n'arrive pas à mettre en oeuvre les transactions avec mysql et son connecteur C# officiel.



J'ai créé une fonction RunMySqlTransaction() qui prend en paramètre un tableau de string. Cela me permet de lancer simplement des transactions d'un lot de requêtes.

Seulement j'ai testé cette méthode en fesant une faute volontaire de syntaxe sql dans une des requetes envoyées à cette méthode, et horreur !!! Le rollback ne semble pas fonctionner :-( C'est à dire que toutes les requetes du lot qui a mis en échec la transaction ne sont pas annulées dans la base !!!



Quelqu'un peut m'aider à résoudre ce casse tête ?? Est-ce mon code
qui implique ça ? Le connecteur .net ou le paramétrage de ma base mysql
?



Voilà mon code :



public void RunMySqlTransaction(string[] transaction_cmd)

{

conn = new MySqlConnection("lachainedeconnexion....");

conn.Open();



MySqlCommand myCommand = conn.CreateCommand();

MySqlTransaction myTrans;



myTrans = conn.BeginTransaction();



myCommand.Connection = conn;

myCommand.Transaction = myTrans;



try

{

foreach (string transac_cmd in transaction_cmd)

{

myCommand.CommandText = transac_cmd;

myCommand.ExecuteNonQuery();

}



myTrans.Commit();



Console.WriteLine("Les enregistrements ont été faits dans la base !");

}

catch(Exception e)

{

try

{

myTrans.Rollback();

}

catch (MySqlException ex)

{

if (myTrans.Connection ! = null)

{

MessageBox.Show("Une exception du type " + ex.GetType() +


" a été rencontrée lors du roll back de la transaction.", "Erreur de
roll back d'une transaction !", MessageBoxButtons.OK);

}

}



MessageBox.Show("Une exception du type " + e.GetType() +


" a été rencontrée lors de l'insertion des données !", "La transaction
a bien été annulée.", MessageBoxButtons.OK);

}

finally

{

conn.Close();

}

2 réponses

Messages postés
540
Date d'inscription
dimanche 29 décembre 2002
Statut
Modérateur
Dernière intervention
13 mai 2011

Ta table doit être de type InnoDB ou BDB ( voir http://www.nexen.net/docs/mysql/annotee/commit.php )

Poppyto http://www.poppyto.net LE site pour les bassistes
http://blogs.developpeur.org/Poppyto Mon Blog sur C#
Messages postés
167
Date d'inscription
dimanche 6 février 2005
Statut
Membre
Dernière intervention
13 avril 2007

Merci !!!!!!!



Je ne savais pas que mysql était réglé par défaut sur "auto-commit".
Donc effectivement ça ne pouvait pas faire bon ménage avec les
transactions....



Encore merci pour ce lien très instructif :-)