Vous avez probablement rencontré ce bogue dans MySQL Connector/NET .
Qu'est-ce qui déclenche ce bogue :
- Le code appelle l'exécution de la requête A
- La transaction 1 pour la requête A est démarrée
- La requête A est exécutée et provoque une erreur dans MySQL
- La transaction 1 n'est PAS annulée
- Le code appelle l'exécution de la requête B
- La transaction 2 pour la requête B est démarrée
- MySQL Connector/NET lève l'exception
Le bogue est le point 4 :la transaction 1 est laissée ouverte après une erreur (ou du moins le connecteur est toujours convaincu qu'il est laissé ouvert). En raison du regroupement des connexions, le code appelant la requête A et la requête B peut être totalement indépendant. De plus, si le temps entre les points 4 et 5 est suffisamment long, la transaction est annulé, d'où la rareté et le caractère aléatoire.
Malheureusement, il n'y a pas encore de solution par MySQL. La seule solution de contournement que je connaisse est de télécharger le code source de Connector/NET et de le réparer/construire vous-même.