2009-04-02 5 views
0

J'ai un problème où je dois appeler l'AS400 db2 pour appeler une série de procédures stockées d'insertion/mise à jour de mon .net et puis mettre à jour quelques tables SQL2005 si tout dans l'AS400 db va bien. Le pilote que j'utilise n'a pas de transactions distribuées, donc je me demandais si vous pouviez utiliser n'importe lequel des pilotes IBM iSeries pour DB2 pour créer un composant COM +/.NET qui participerait à une transaction distribuée. Pls laissez-moi savoir si quelqu'un a déjà fait quelque chose comme ça avant ou n'importe quel pointeur serait grandement apprécié.Transaction distribuée de .NET vers DB2

Répondre

5

Quel pilote utilisez-vous?

IBM DB2 Connect prend en charge les transactions distribuées gérées par Windows DTC.

Le pilote DB2 de Microsoft, fourni dans Microsoft Host Integration Server, effectue également des transactions.

Je vous entends deux choses différentes. Vous voulez effectuer une transaction qui s'étend sur SQL et DB2. et aussi vous voulez construire un composant qui participe à une transaction distribuée. Ceux-ci peuvent être faits ensemble mais le premier n'exige pas le dernier.

En utilisant les System.Transactions classes .NET 2.0, vous pouvez le faire:

TransactionOptions options = new TransactionOptions(); 
    options.IsolationLevel = IsolationLevel.Serializable; 
    options.Timeout = TransactionManager.DefaultTimeout; 
    using(var scope = new TransactionScope(TransactionScopeOption.Required, 
          options, 
          EnterpriseServicesInteropOption.Full)) 
    { 
     TransactionalWorkinDb2(); 
     TransactionalWorkinSql(); 
     scope.Complete(); 
    } 

Le résultat sera une transaction distribuée qui couvre DB2 et SQL, mais ce n'est pas un élément qui participe à une transaction distribuée, si vous voyez ce que je veux dire.

L'autre alternative consiste à utiliser le modèle EnterpriseServices/COM + de définition d'un composant qui fait quelque chose et en marquant ce composant comme transactionnel. Cela fonctionne également, mais n'est pas requis pour effectuer des transactions distribuées dans .NET.

Questions connexes