3 votes

Que se passe-t-il dans System.Data.SqlClient.SqlTransaction.Dispose ?

J'ai examiné la méthode Dispose() de System.Data.SqlClient.SqlTransaction (en utilisant un décompilateur) :

 protected override void Dispose(bool disposing)
    {
      if (disposing)
      {
        SNIHandle target = (SNIHandle) null;
        RuntimeHelpers.PrepareConstrainedRegions();
        try
        {
          target = SqlInternalConnection.GetBestEffortCleanupTarget(this._connection);
          if (!this.IsZombied)
          {
            if (!this.IsYukonPartialZombie)
              this._internalTransaction.Dispose();
          }
        }
        catch (OutOfMemoryException ex)
        {
          this._connection.Abort((Exception) ex);
          throw;
        }
        catch (StackOverflowException ex)
        {
          this._connection.Abort((Exception) ex);
          throw;
        }
        catch (ThreadAbortException ex)
        {
          this._connection.Abort((Exception) ex);
          SqlInternalConnection.BestEffortCleanup(target);
          throw;
        }
      }
      base.Dispose(disposing);
    }

Pourquoi tout le monde dit dans les forums qu'il retourne dans la poubelle ? Où se fait le retour en arrière ?

4voto

Denis Points 2122

@BlorgBeard a raison en disant "Je crois que la transaction interne se retourne dans sa propre Dispose - c'est-à-dire dans this._internalTransaction.Dispose() ;". Je l'écris comme une réponse pour d'autres personnes. (Voir la dernière déclaration)

Code pour System.Data.SqlClient.SqlInternalTransaction.Dispose() -- VOIR LA DERNIÈRE LIGNE :

private void Dispose(bool disposing)
{
  Bid.PoolerTrace("<sc.SqlInteralTransaction.Dispose|RES|CPOOL> %d#, Disposing\n", this.ObjectID);
  if (!disposing || this._innerConnection == null)
    return;
  this._disposing = true;
  this.Rollback();
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X