none
TransactionScope et entreprise library

    Question

  • j'utilise entreprise library pour l'accés au données. et j'aime faire un traitement dans une transaction en utilisant TransactionScope. voila un peu mon code : 

     using (TransactionScope transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew))
                {

                        UpdateEtatTache(idTache, idAgent, EtatExecution.EtatExecutionEnum.Finie);
                        UpdateEtatTache(idTache, idAgent, EtatExecution.EtatExecutionEnum.EnCours);
                         transactionScope.Complete();
               }

    le code de la methode UpdateEtatTache ce trouve dans la couche DataAcess de la solution, qui est le suivant : 

     public bool UpdateEtatTache(int idTache, int idAgent, EtatExecution.EtatExecutionEnum etatExecutionEnum)
            {
                    StringBuilder sb = new StringBuilder();
                    sb.Append(" update o2_wftache set wta_etatexecution = :EtatExecution ");
                    if (etatExecutionEnum == EtatExecution.EtatExecutionEnum.Finie)
                        sb.Append(" , wta_dtmaj = : DateMAJ, age_maj_id = :AgeMajId, wta_dtcloture = :DateClo");
                    else if (etatExecutionEnum == EtatExecution.EtatExecutionEnum.EnCours)
                        sb.Append(" , wta_dtouverture = :DateOuvert ");
                    sb.Append(" where 1=1");
                    if (etatExecutionEnum == EtatExecution.EtatExecutionEnum.Finie)
                        sb.Append("and wta_id = :idTache");
                    else if (etatExecutionEnum == EtatExecution.EtatExecutionEnum.EnCours)
                        sb.Append("and wta_pere_id = :idTache");
                    DatabaseCommand = DataBaseConnection.GetSqlStringCommand(sb.ToString());
                    if (etatExecutionEnum == EtatExecution.EtatExecutionEnum.Finie)
                    {
                        DataBaseConnection.AddInParameter(DatabaseCommand, "DateMAJ", DbType.DateTime, DateTime.Now.Date);
                        DataBaseConnection.AddInParameter(DatabaseCommand, "AgeMajId", DbType.Int32, idAgent);
                        DataBaseConnection.AddInParameter(DatabaseCommand, "DateClo", DbType.DateTime, DateTime.Now.Date);
                    }
                    else if (etatExecutionEnum == EtatExecution.EtatExecutionEnum.EnCours)
                    {

                    }
                    DataBaseConnection.AddInParameter(DatabaseCommand, "idTache", DbType.Int32, idTache);
                    DataBaseConnection.AddInParameter(DatabaseCommand, "EtatExecution", DbType.Int32, (int)etatExecutionEnum);
                    if (DataBaseConnection.ExecuteNonQuery(DatabaseCommand) == 1)
                        return true;
                    return false;
                } 

    DataBaseConnection et DatabaseCommand son definie dans une classe generic hérité par la classe ou ce trouve cette méthode. voila le code : 
                 DataBaseConnection = DatabaseFactory.CreateDatabase("OracleConnectionString");


    Le probleme et que lorsqu'il execute DataBaseConnection.ExecuteNonQuery(DatabaseCommand) il se plente dans : connection.Open(); de la classe Database de entreprise library et il ne retourne aucun erreur et il ne fait aucun progression. (il reste la).

    Merci d'avance pour vos aides.

    ingenieur developpement .net
    mercredi 11 novembre 2009 14:53

Toutes les réponses

  • il parait que certain moment il catch cette erreur : "Tentative de lecture ou d'écriture de mémoire protégée. Cela indique souvent qu'une autre mémoire est endommagée."
    ingenieur developpement .net
    lundi 16 novembre 2009 07:13