1

J'ai une application WinForm qui interroge la base de données SqlCe à l'aide de tables de formatage de jeux de données typés. J'ai un assemblage de formulaire principal et un assemblage de base de données qui gère chaque opération db. J'ai des problèmes avec la mise à jour en utilisant tableadapter dans une transaction et je serais reconnaissant si quelqu'un pouvait me donner des idées pourquoi. méthodeUtilisation de TransactionScope avec un jeu de données typé

Update() donne cette erreur:

"The connection object can not be enlisted in transaction scope." 

Voici mon code:

namespace Main 
{ 
    public class MainForm 
    { 
     private MyDbAssembly.MyDbClass db; 

     //instantiate and db fill methods omitted.. 

     private void DeleteStuff() 
     { 
      using (TransactionScope trans = new TransactionScope()) 
      { 
       this.db.Delete(id); 
       UpdateDb(); 

       trans.Complete(); 
      } 
     } 

     private void UpdateDb() 
     { 
      //bindingsource endedit & datagridview endedit methods omitted.. 
      this.db.Update(); 
     } 
    } 
} 

namespace MyDbAssembly 
{ 
    public class MyDbClass 
    { 
     private myTypedDataset myDataSet; 
     private myTypedDataSetTableAdapter.MyTable1Adapter table1Adapter; 

     //instantiate methods omitted.. 

     public void Delete(Guid id) 
     { 
      this.myDataSet.MyTable1.FindByID(id).Delete(); 
     } 

     public void Update() 
     { 
      this.table1Adapter.Update(myDataSet.MyTable); //<-- ERROR LINE 
     } 
    } 
} 
+0

Vous ne l'avez pas déjà demandé? http://stackoverflow.com/questions/602421 –

+1

Non, ce n'est pas la même chose. Cette question était de savoir si cela fonctionnerait, celui-ci concerne l'erreur que j'obtiens. – dstr

Répondre

1

Parce que vous avez créé le table1Adapter en dehors du champ d'application trans TransactionScope.

Questions connexes