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; }