Pas de transactions sql avec MyConnector .NET 1.0.6 ??????

Résolu
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007 - 16 oct. 2005 à 21:26
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007 - 17 oct. 2005 à 12:55
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

cs_poppyto Messages postés 540 Date d'inscription dimanche 29 décembre 2002 Statut Modérateur Dernière intervention 13 mai 2011
17 oct. 2005 à 03:43
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#
3
georgeduke Messages postés 167 Date d'inscription dimanche 6 février 2005 Statut Membre Dernière intervention 13 avril 2007
17 oct. 2005 à 12:55
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 :-)
0
Rejoignez-nous