private void CloseConnection() { if (this.m_needToCloseConnection) { RuntimeDataSource.CloseConnection(this.m_connection, this.m_dataSource, this.m_odpContext, this.m_executionMetrics); if (this.NeedsExecutionLogging && this.m_odpContext.ExecutionLogContext != null) { int num = (this.m_runtimeDataSets != null) ? this.m_runtimeDataSets.Count : 0; List <DataProcessingMetrics> list = new List <DataProcessingMetrics>(); for (int i = 0; i < num; i++) { if (this.m_runtimeDataSets[i].IsConnectionOwner) { this.m_odpContext.ExecutionLogContext.AddDataSourceParallelExecutionMetrics(this.m_dataSource.Name, this.m_dataSource.DataSourceReference, this.m_dataSource.Type, this.m_runtimeDataSets[i].DataSetExecutionMetrics); } else { list.Add(this.m_runtimeDataSets[i].DataSetExecutionMetrics); } } this.m_odpContext.ExecutionLogContext.AddDataSourceMetrics(this.m_dataSource.Name, this.m_dataSource.DataSourceReference, this.m_dataSource.Type, this.m_executionMetrics, list.ToArray()); } } this.m_connection = null; }
protected void CloseConnection() { if (this.m_isConnectionOwner && this.m_dataSourceConnection != null) { RuntimeDataSource.CloseConnection(this.m_dataSourceConnection, this.m_dataSource, this.m_odpContext, this.m_executionMetrics); this.m_dataSourceConnection = null; } }
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; } }
public static void CloseConnection(IDbConnection connection, AspNetCore.ReportingServices.ReportIntermediateFormat.DataSource dataSource, OnDemandProcessingContext odpContext, DataProcessingMetrics executionMetrics) { try { DataSourceInfo dataSourceInfo = RuntimeDataSource.GetDataSourceInfo(dataSource, odpContext); odpContext.CreateAndSetupDataExtensionFunction.CloseConnection(connection, dataSource, dataSourceInfo); } catch (Exception innerException) { throw new ReportProcessingException(ErrorCode.rsErrorClosingConnection, innerException, dataSource.Name); } }
public void Close() { IDataReader dataReader = Interlocked.Exchange <IDataReader>(ref this.m_dataReader, (IDataReader)null); if (dataReader != null) { QueryExecutionUtils.DisposeDataExtensionObject(ref dataReader, "data reader", this.m_dataSet.Name, this.m_executionMetrics, DataProcessingMetrics.MetricType.DisposeDataReader); } this.m_commandWrappedForCancel = null; IDbCommand dbCommand = Interlocked.Exchange <IDbCommand>(ref this.m_command, (IDbCommand)null); if (dbCommand != null) { QueryExecutionUtils.DisposeDataExtensionObject(ref dbCommand, "command", this.m_dataSet.Name); } IDbConnection dbConnection = Interlocked.Exchange <IDbConnection>(ref this.m_connection, (IDbConnection)null); if (dbConnection != null) { RuntimeDataSource.CloseConnection(dbConnection, this.m_dataSource, this.m_odpContext, this.m_executionMetrics); } }
protected IDataReader RunLiveQuery(List <AspNetCore.ReportingServices.ReportIntermediateFormat.ParameterValue> queryParams, object[] paramValues) { IDataReader dataReader = null; IDbCommand dbCommand = null; ViewerJobContextImpl jobContext = (ViewerJobContextImpl)this.m_odpContext.JobContext; if (this.m_dataSourceConnection == null) { this.m_dataSourceConnection = RuntimeDataSource.OpenConnection(this.m_dataSource, this.m_dataSet, this.m_odpContext, this.m_executionMetrics); } if (string.IsNullOrEmpty(this.m_dataSourceConnection.ConnectionString) && !string.IsNullOrEmpty(this.m_dataSource.ConnectStringExpression.OriginalText)) { this.m_dataSourceConnection.ConnectionString = this.m_dataSource.ConnectStringExpression.OriginalText; } try { this.m_executionMetrics.StartTimer(DataProcessingMetrics.MetricType.Query); dbCommand = this.CreateCommand(); this.SetCommandParameters(dbCommand, queryParams, paramValues); string commandText = this.SetCommandText(dbCommand); this.StoreCommandText(commandText); this.SetCommandType(dbCommand); this.SetTransaction(dbCommand); this.m_odpContext.CheckAndThrowIfAborted(); //todo : delete; //var ss=System.AppDomain.CurrentDomain.GetAssemblies().Select(t => t.FullName).OrderBy(t => t).ToList(); this.SetCommandTimeout(dbCommand); this.ExtractRewrittenCommandText(dbCommand); this.SetRestartPosition(dbCommand); DataSourceInfo dataSourceInfo = null; if (dbCommand is IDbImpersonationNeededForCommandCancel) { dataSourceInfo = this.m_dataSource.GetDataSourceInfo(this.m_odpContext); } this.m_command = dbCommand; this.m_commandWrappedForCancel = new CommandWrappedForCancel(this.m_command, this.m_odpContext.CreateAndSetupDataExtensionFunction, this.m_dataSource, dataSourceInfo, this.m_dataSet.Name, this.m_dataSourceConnection); if (jobContext != null) { jobContext.SetAdditionalCorrelation(this.m_command); jobContext.ApplyCommandMemoryLimit(this.m_command); } DataSourceErrorInspector errorInspector = this.CreateErrorInspector(); dataReader = this.ExecuteReader(jobContext, errorInspector, commandText); this.StoreDataReader(dataReader, errorInspector); return(dataReader); } catch (RSException ex) { this.EagerInlineCommandAndReaderCleanup(ref dataReader, ref dbCommand); throw; } catch (Exception e) { if (AsynchronousExceptionDetection.IsStoppingException(e)) { throw; } this.EagerInlineCommandAndReaderCleanup(ref dataReader, ref dbCommand); throw; } finally { this.m_executionMetrics.RecordTimerMeasurement(DataProcessingMetrics.MetricType.Query); } }