Exception ZombieCheck - Cette SqlTransaction est terminée; il n'est plus utilisable - lors d'un commit simple
J'ai le code suivant qui effectue une validation d'une seule ligne à une table de base de données (SQL 2008 /.NET 4)
using (var db = new MyDbDataContext(_dbConnectionString))
{
Action action = new Action();
db.Actions.InsertOnSubmit(dbAction);
db.SubmitChanges();
}
Normalement, tout est très bien, mais de temps en temps je reçois l'exception suivante:
System.InvalidOperationException: This SqlTransaction has completed; it is no longer usable.
at System.Data.SqlClient.SqlTransaction.ZombieCheck()
at System.Data.SqlClient.SqlTransaction.Rollback()
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
Il y a un certain nombre de questions similaires sur la mais je, après lecture à eux, je ne peut pas déterminer la cause.
Cela pourrait-il être simplement dû à un SQL délai d'attente (à l'exception se produit près de 25 ans après l'appel est fait)? Ou dois-je attendre un SQL exception délai dans ce cas?
Personne ne sait quoi d'autre peut en être la cause?
source d'informationauteur Mr. Flibble
Vous devez vous connecter pour publier un commentaire.
La
DataContext.SubmitChanges
méthode a le code suivant les lignes de son corps:Lorsque la connexion arrive à expiration, le
catch
bloc est exécuté et ladbTransaction.Rollback();
ligne va lancer une InvalidOperationException.Si vous aviez le contrôle sur le code, vous pouvez intercepter l'exception comme ceci:
Puis-je suggérer que la connexion se ferme plus tôt que la transaction est validée. Ensuite, la transaction est annulée. Voir cet article sur le Blog MSDN.
OUI! J'ai eu le même problème. L'effrayant réponse est que SQLServer parfois annule une transaction sur le serveur, lorsqu'il rencontre une erreur, et ne passe pas de l'erreur vers le client. OUPS!
Regard sur le Groupe Google de microsoft.public.dotnet.cadre.adonet pour "SqlTransaction.ZombieCheck erreur" Colberd Zhou [MSFT], l'explique très bien.
et voir aef123 commentaire de cette SORTE de post