private void CommitTransaction()
 {
     if (this.m_isTransactionOwner)
     {
         if (this.m_isGlobalTransaction)
         {
             if (this.m_isGlobalConnection)
             {
                 this.m_needToCloseConnection = false;
             }
         }
         else
         {
             Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': Committing transaction.", this.m_dataSource.Name.MarkAsModelInfo());
             try
             {
                 this.m_transaction.Transaction.Commit();
             }
             catch (Exception innerException)
             {
                 throw new ReportProcessingException(ErrorCode.rsErrorCommitTransaction, innerException, this.m_dataSource.Name.MarkAsModelInfo());
             }
         }
         this.m_isTransactionOwner = false;
     }
     this.m_transaction = null;
 }
 protected bool InitializeDataSource(ExecutedQuery existingQuery)
 {
     if (this.m_dataSource.DataSets != null && 0 < this.m_dataSource.DataSets.Count)
     {
         this.m_connection            = null;
         this.m_transaction           = null;
         this.m_needToCloseConnection = false;
         this.m_isGlobalConnection    = false;
         this.m_isTransactionOwner    = false;
         this.m_isGlobalTransaction   = false;
         this.m_runtimeDataSets       = this.CreateRuntimeDataSets();
         if (0 >= this.m_runtimeDataSets.Count)
         {
             return(false);
         }
         this.m_canAbort = true;
         this.m_odpContext.CheckAndThrowIfAborted();
         this.m_useConcurrentDataSetProcessing = (this.m_runtimeDataSets.Count > 1 && this.AllowConcurrentProcessing);
         if (!this.m_dataSource.IsArtificialForSharedDataSets)
         {
             if (existingQuery != null)
             {
                 this.InitializeFromExistingQuery(existingQuery);
             }
             else
             {
                 this.OpenInitialConnectionAndTransaction();
             }
         }
         return(true);
     }
     return(false);
 }
        protected virtual void OpenInitialConnectionAndTransaction()
        {
            if (this.m_dataSource.Transaction && this.m_mergeTran)
            {
                AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.DataSourceInfo dataSourceInfo = this.m_odpContext.GlobalDataSourceInfo[this.m_dataSource.Name];
                if (dataSourceInfo != null)
                {
                    this.m_connection  = dataSourceInfo.Connection;
                    this.m_transaction = dataSourceInfo.TransactionInfo;
                }
            }
            Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': Transaction = {1}, MergeTran = {2}, NumDataSets = {3}", this.m_dataSource.Name.MarkAsModelInfo(), this.m_dataSource.Transaction, this.m_mergeTran, this.m_runtimeDataSets.Count);
            if (this.m_connection == null)
            {
                AspNetCore.ReportingServices.ReportIntermediateFormat.DataSet dataSet = this.m_runtimeDataSets[0].DataSet;
                this.m_connection            = RuntimeDataSource.OpenConnection(this.m_dataSource, dataSet, this.m_odpContext, this.m_executionMetrics);
                this.m_needToCloseConnection = true;
                Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': Created a connection.", this.m_dataSource.Name.MarkAsModelInfo());
            }
            bool flag = false;

            if (this.m_dataSource.Transaction)
            {
                if (this.m_transaction == null)
                {
                    IDbTransaction transaction = this.m_connection.BeginTransaction();
                    Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': Begun a transaction.", this.m_dataSource.Name.MarkAsModelInfo());
                    this.m_transaction        = new AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.TransactionInfo(transaction);
                    this.m_isTransactionOwner = true;
                }
                IDbTransactionExtension dbTransactionExtension = this.m_transaction.Transaction as IDbTransactionExtension;
                flag = (dbTransactionExtension != null && dbTransactionExtension.AllowMultiConnection);
                this.m_useConcurrentDataSetProcessing &= flag;
                Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': TransactionCanSpanConnections = {1}, ConcurrentDataSets = {2}", this.m_dataSource.Name.MarkAsModelInfo(), flag, this.m_useConcurrentDataSetProcessing);
            }
            this.MergeAutoCollationSettings(this.m_connection);
            if (this.m_isTransactionOwner && this.m_report.SubReportMergeTransactions && !this.m_odpContext.ProcessReportParameters)
            {
                IDbConnection connection;
                if (flag)
                {
                    connection = null;
                    this.m_isGlobalConnection = false;
                }
                else
                {
                    connection = this.m_connection;
                    this.m_isGlobalConnection = true;
                }
                Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': Storing trans+conn into GlobalDataSourceInfo. CloseConnection = {1}.", this.m_dataSource.Name.MarkAsModelInfo(), this.m_needToCloseConnection);
                DataSourceInfo dataSourceInfo2 = RuntimeDataSource.GetDataSourceInfo(this.m_dataSource, this.m_odpContext);
                this.m_odpContext.GlobalDataSourceInfo.Add(this.m_dataSource, connection, this.m_transaction, dataSourceInfo2);
                this.m_isGlobalTransaction = true;
            }
        }
 private void RollbackTransaction()
 {
     if (this.m_transaction != null)
     {
         this.m_transaction.RollbackRequired = true;
         if (this.m_isGlobalTransaction)
         {
             this.m_odpContext.GlobalDataSourceInfo.Remove(this.m_dataSource.Name);
         }
         if (this.m_isTransactionOwner)
         {
             Global.Tracer.Trace(TraceLevel.Error, "Data source '{0}': Rolling the transaction back.", this.m_dataSource.Name.MarkAsModelInfo());
             try
             {
                 this.m_transaction.Transaction.Rollback();
             }
             catch (Exception innerException)
             {
                 throw new ReportProcessingException(ErrorCode.rsErrorRollbackTransaction, innerException, this.m_dataSource.Name.MarkAsModelInfo());
             }
         }
         this.m_transaction = null;
     }
 }
 public void InitProcessingParams(IDbConnection conn, AspNetCore.ReportingServices.ReportProcessing.ReportProcessing.TransactionInfo transInfo)
 {
     base.m_dataSourceConnection = conn;
     base.m_transInfo            = transInfo;
 }