J'ai un serveur Web et deux serveurs DB sur deux réseaux différents, Db1 et Db2 (Remote Database)."La transaction a déjà été implicitement ou explicitement validée ou annulée" dans la portée
- DB1: SQL Server 2008 R2, système d'exploitation: Windows Server 2003 SP2
- DB2: SQL Server 2000, système d'exploitation: Windows Server 2003 R2
- Web serveur: Windows Server 2003 R2
Je souhaite insérer deux enregistrements différents dans ces bases de données et j'utilise un TransactionScope
.
using (TransactionScope tscope = new TransactionScope(TransactionScopeOption.RequiresNew))
{
//open connection db 1
//insert into db1
//open connection db2 -- the problem is here
//insert into db2
tscope.Complete();
}
Quand je trace le code source, l'insertion dans la première databse est fait avec succès, mais lorsque la seconde connexion veut être ouverte que je rencontre ci-dessous erreur.
Erreur:
The transaction has already been implicitly or explicitly committed or aborted.
J'ai configuré MSDTC, coordinateur de transactions Distributrd et tout est ok. Je peux avoir une transaction distribuée dans le serveur My DB et je n'ai aucun problème. Quel est le problème avec TransactionScope
? Aidez-moi, s'il vous plaît.
la première connexion est LINQ to SQL:
DataClassesDataContext Dac = new DataClassesDataContext();
Dac.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionCs"].ConnectionString;
tbl_KargahDistribution Workshop = new tbl_KargahDistribution();
Workshop.WpCode = Bodu.WpRealCode;
Workshop.State = Bodu.BduState;
Workshop.City = Bodu.BduCity;
Workshop.Town = Bodu.BduTown;
Workshop.SubSystem = Bodu.BduSubSystem;
Dac.tbl_KargahDistributions.InsertOnSubmit(Workshop);
Dac.SubmitChanges();
la deuxième connexion est:
Queries Qu = new Queries();
SqlCon = new SqlConnection(BoBaz.BazConnectionString);
SqlCon.Open();
string sq = Qu.InsertWorkshopBaseInfo();
SqlCom = new SqlCommand(sq, SqlCon);
Pouvez-vous inclure les détails sur l'ouverture de votre connexion? – Kane
Avez-vous essayé de jouer autour de 'SqlConnection.BeginTransaction()', 'Transaction.Current.EnlistVolatile()', etc.? – abatishchev
Je viens d'utiliser enlist = false; dans la deuxième chaîne de connexion, je n'ai reçu aucun message d'erreur et le problème a été résolu. Mais je pense quand je mets enlist = false; ma deuxième connexion ne fera pas partie de la transaction, donc je ne l'ai pas utilisée. –