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

            if (m_dataSource.Transaction)
            {
                if (m_transaction == null)
                {
                    IDbTransaction transaction = m_connection.BeginTransaction();
                    Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': Begun a transaction.", m_dataSource.Name.MarkAsModelInfo());
                    m_transaction        = new Microsoft.ReportingServices.ReportProcessing.ReportProcessing.TransactionInfo(transaction);
                    m_isTransactionOwner = true;
                }
                flag = ((m_transaction.Transaction as IDbTransactionExtension)?.AllowMultiConnection ?? false);
                m_useConcurrentDataSetProcessing &= flag;
                Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': TransactionCanSpanConnections = {1}, ConcurrentDataSets = {2}", m_dataSource.Name.MarkAsModelInfo(), flag, m_useConcurrentDataSetProcessing);
            }
            MergeAutoCollationSettings(m_connection);
            if (m_isTransactionOwner && m_report.SubReportMergeTransactions && !m_odpContext.ProcessReportParameters)
            {
                IDbConnection connection;
                if (flag)
                {
                    connection           = null;
                    m_isGlobalConnection = false;
                }
                else
                {
                    connection           = m_connection;
                    m_isGlobalConnection = true;
                }
                Global.Tracer.Trace(TraceLevel.Verbose, "Data source '{0}': Storing trans+conn into GlobalDataSourceInfo. CloseConnection = {1}.", m_dataSource.Name.MarkAsModelInfo(), m_needToCloseConnection);
                DataSourceInfo dataSourceInfo2 = GetDataSourceInfo(m_dataSource, m_odpContext);
                m_odpContext.GlobalDataSourceInfo.Add(m_dataSource, connection, m_transaction, dataSourceInfo2);
                m_isGlobalTransaction = true;
            }
        }
コード例 #5
0
 internal void InitProcessingParams(IDbConnection conn, Microsoft.ReportingServices.ReportProcessing.ReportProcessing.TransactionInfo transInfo)
 {
     m_dataSourceConnection = conn;
     m_transInfo            = transInfo;
 }