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; }
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; }
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); }
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; } }
internal void InitProcessingParams(IDbConnection conn, Microsoft.ReportingServices.ReportProcessing.ReportProcessing.TransactionInfo transInfo) { m_dataSourceConnection = conn; m_transInfo = transInfo; }