private IDTSOutput100 ConfigureOutput(IDTSComponentMetaData100 src, IDeDestination dst, CManagedComponentWrapper dcomp) { if (dcomp == null) { dcomp = src.Instantiate(); } IDTSOutput100 output = null; if (_movedata.Partition == null || String.IsNullOrEmpty(_movedata.Partition.Function) || _movedata.Partition.Function == "NONE") { output = src.OutputCollection.New(); output.Name = String.Format(CultureInfo.InvariantCulture, "Full Output to {0}", output.ID); output.SynchronousInputID = src.InputCollection[0].ID; } else { //connect to splitter, make sure the default output is the last output = dcomp.InsertOutput(DTSInsertPlacement.IP_BEFORE, src.OutputCollection[0].ID); output.Name = String.Format(CultureInfo.InvariantCulture, "Partitioned Output to {0}", output.ID); output.Description = String.Format(CultureInfo.InvariantCulture, "Partitions {0}-{1} ", dst.PartitionRange.Min, dst.PartitionRange.Max); output.SynchronousInputID = src.InputCollection[0].ID; output.IsErrorOut = false; // Note: You will get an exception if you try to set these properties on the Default Output. dcomp.SetOutputProperty(output.ID, "EvaluationOrder", 0); if (dst.PartitionRange.Min == dst.PartitionRange.Max) { dcomp.SetOutputProperty(output.ID, "FriendlyExpression", String.Format(CultureInfo.InvariantCulture, "[{0}] == {1}", _movedata.Partition.Output, dst.PartitionRange.Min)); } else { dcomp.SetOutputProperty(output.ID, "FriendlyExpression", String.Format(CultureInfo.InvariantCulture, "[{0}] >= {1} && [{0}] <= {2}", _movedata.Partition.Output, dst.PartitionRange.Min, dst.PartitionRange.Max)); } } return(output); }
private void MoveDataRun(Parameters p, CancellationToken token) { System.Diagnostics.Debug.Assert(p != null); MoveData action = p.MoveData; //Check the Source if (action.DataSource.Type == SourceType.Unknown) { throw new UnknownSourceType(); } _logger.Information(action.DataSource.Description); //Check destinations int numValidDestinations = action.DataDestination.Test(_logger); if (numValidDestinations == 0) { throw new InvalidDestinations("Error: No Valid destinations found"); } if (numValidDestinations != action.DataDestination.Destinations.Count) { throw new InvalidDestinations("Error: Invalid destinations found"); } //create and configure the package DESSISPackage Extractor = new DESSISPackage(action, _logger); Package pkg = Extractor.LoadPackage(); if (pkg == null) { throw new DeltaExtractorBuildException("Failed to Load or Build the SSIS Package"); } ExecutePackageWithEvents(pkg, token); int rowCount = Convert.ToInt32(pkg.Variables["RowCount"].Value, CultureInfo.InvariantCulture); _logger.Information("DE extracted {Count} rows from the Source.", rowCount.ToString()); _logger.Information("DE Package completed."); //ETLController.CounterSet("RowsExtracted", rowCount.ToString()); //if this is a staging extract, then call the upload sproc for each DB Destination //staging value defines which upsert type to use //IEnumerable<object> res = action.DataDestination.Destinations.Where(d => ((IDeDestination)d).Type == DestinationType.OleDb); foreach (object odest in action.DataDestination.Destinations) { IDeDestination dest = (IDeDestination)odest; if (dest.StagingBlock != null) { if (dest.StagingBlock.Staging) { if (dest.DbSupportObject == null) { throw new DeltaExtractorBuildException("Staging support is not available for this destination"); } IDeStagingSupport supp = (IDeStagingSupport)dest.DbSupportObject; if (String.IsNullOrEmpty(dest.StagingBlock.StagingTableName)) { if (!supp.CreateStagingTable(false, _logger)) { throw new CouldNotCreateStagingTableException(dest.StagingBlock.StagingTableName); } } if (!supp.UploadStagingTable(p.RunID, _logger)) { throw new CouldNotUploadStagingTableException(dest.StagingBlock.StagingTableName); } } } } }
private IDTSOutput100 ConfigureOutput(IDTSComponentMetaData100 src, IDeDestination dst) { return(ConfigureOutput(src, dst, null)); }