public override IDTSInputColumn100 SetUsageType(int inputID, IDTSVirtualInput100 virtualInput, int lineageID, DTSUsageType usageType)
        {
            IDTSInputColumn100            inputColumn            = null;
            IDTSOutput100                 output                 = this.ComponentMetaData.OutputCollection[0];
            IDTSOutputColumnCollection100 outputColumnCollection = output.OutputColumnCollection;
            IDTSInput100 input = this.ComponentMetaData.InputCollection[0];
            IDTSInputColumnCollection100 inputColumnCollection = input.InputColumnCollection;

            if (usageType == DTSUsageType.UT_IGNORED)
            {
                inputColumn = inputColumnCollection.GetInputColumnByLineageID(lineageID);

                IDTSOutputColumn100 outputColumn = outputColumnCollection.FindObjectByID(inputColumn.MappedColumnID);
                if (outputColumn != null)
                {
                    outputColumnCollection.RemoveObjectByID(outputColumn.ID);
                }

                inputColumn = base.SetUsageType(inputID, virtualInput, lineageID, usageType);
            }
            else
            {
                inputColumn = base.SetUsageType(inputID, virtualInput, lineageID, usageType);

                IDTSOutputColumn100 outputColumn = outputColumnCollection.New();
                outputColumn.Name = inputColumn.Name;
                outputColumn.SetDataTypeProperties(inputColumn.DataType, inputColumn.Length, inputColumn.Precision, inputColumn.Scale, inputColumn.CodePage);
                outputColumn.MappedColumnID = inputColumn.LineageID;
                inputColumn.MappedColumnID  = outputColumn.LineageID;
                AddInputColumnProperty(inputColumn, GeoColumnPropName, "True if the column holds geometry objects to be joined together.", false);
                AddInputColumnProperty(inputColumn, GroupByColumnPropName, "True if the column holds group by values.", false);
            }

            return(inputColumn);
        }
Exemplo n.º 2
0
        public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols)
        {
            if (sourceOutputCols.Count <= 0)
            {
                throw new InvalidOperationException("Source component has empty output");
            }

            StringBuilder sb = new StringBuilder("CREATE TABLE ");

            sb.Append(String.Format(CultureInfo.InvariantCulture, "{0} (", quotedSheetName));
            foreach (IDTSOutputColumn100 col in sourceOutputCols)
            {
                String SqlType = "nvarchar(255)";
                sb.Append(GetQuotedName(col.Name, prefix, suffix));
                sb.Append(SqlType);
                sb.Append(", ");
            }
            sb.Remove(sb.Length - 2, 2);             // remove last ", "
            sb.Append(");");
            String sql = sb.ToString();

            using (OleDbConnection conn = new OleDbConnection())
            {
                conn.ConnectionString = ConnectionString;
                conn.Open();
                OleDbCommand cmd = conn.CreateCommand();
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }
        public override void SetOutputColumnDataTypeProperties(int iOutputID, int iOutputColumnID, DataType eDataType, int iLength, int iPrecision, int iScale, int iCodePage)
        {
            IDTSOutputCollection100 outputColl = ComponentMetaData.OutputCollection;
            IDTSOutput100           output     = outputColl.GetObjectByID(iOutputID);

            if (output != null)
            {
                if (output.IsErrorOut)
                {
                    this.PostErrorAndThrow(MessageStrings.CantChangeErrorOutputProperties);
                }
                else
                {
                    IDTSOutputColumnCollection100 columnColl = output.OutputColumnCollection;
                    IDTSOutputColumn100           column     = columnColl.GetObjectByID(iOutputColumnID);
                    if (column != null)
                    {
                        if (ValidateSupportedDataTypes(eDataType) == DTSValidationStatus.VS_ISVALID)
                        {
                            column.SetDataTypeProperties(eDataType, iLength, iPrecision, iScale, iCodePage);
                        }
                        else
                        {
                            throw new COMException(string.Empty, E_FAIL);
                        }
                    }
                }
            }
        }
        public override void SetOutputColumnDataTypeProperties(int iOutputID, int iOutputColumnID, DataType eDataType, int iLength, int iPrecision, int iScale, int iCodePage)
        {
            IDTSOutputCollection100       outputColl = ComponentMetaData.OutputCollection;
            IDTSOutput100                 output     = outputColl.GetObjectByID(iOutputID);
            IDTSOutputColumnCollection100 columnColl = output.OutputColumnCollection;
            IDTSOutputColumn100           column     = columnColl.GetObjectByID(iOutputColumnID);

            column.SetDataTypeProperties(eDataType, iLength, iPrecision, iScale, iCodePage);
        }
Exemplo n.º 5
0
        private void BadRowsRedirect(IDTSComponentMetaData100 sourceTask, IDTSComponentMetaData100 badRowsTask)
        {
            IDTSOutput100 srcOutput = sourceTask.OutputCollection[0];
            IDTSOutputColumnCollection100 srcOutputCols = srcOutput.OutputColumnCollection;

            sourceTask.UsesDispositions = true;
            foreach (IDTSOutputColumn100 outputCol in srcOutputCols)
            {
                outputCol.ErrorRowDisposition      = DTSRowDisposition.RD_RedirectRow;
                outputCol.TruncationRowDisposition = DTSRowDisposition.RD_RedirectRow;
            }
        }
        public override void SetOutputColumnDataTypeProperties(int outputID, int outputColumnID, Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType dataType, int length, int precision, int scale, int codePage)

        {
            IDTSOutputCollection100 outputColl = this.ComponentMetaData.OutputCollection;

            IDTSOutput100 output = outputColl.GetObjectByID(outputID);

            IDTSOutputColumnCollection100 columnColl = output.OutputColumnCollection;

            IDTSOutputColumn100 column = columnColl.GetObjectByID(outputColumnID);

            column.SetDataTypeProperties(dataType, length, precision, scale, codePage);
        }
        private void BuildOutputColumnMaps()
        {
            this.outputColumnIndexMap.Clear();

            IDTSOutput100 output = this.ComponentMetaData.OutputCollection[0];
            IDTSOutputColumnCollection100 outputColumnCollection = output.OutputColumnCollection;

            foreach (IDTSOutputColumn100 outputColumn in outputColumnCollection)
            {
                int outputColumnLineageID = outputColumn.LineageID;

                this.outputColumnIndexMap.Add(outputColumnLineageID, this.BufferManager.FindColumnByLineageID(output.Buffer, outputColumnLineageID));
            }
        }
Exemplo n.º 8
0
        public static IDTSOutputColumn100 AddKeyOutputColumns(IDTSOutput100 keyRecords)
        {
            IDTSOutputColumnCollection100 outputColumnCollection = keyRecords.OutputColumnCollection;
            IDTSOutputColumn100           outputColumn           = outputColumnCollection.NewAt(0);

            outputColumn.Name = MessageStrings.KeyRecordKeyColumnName;
            outputColumn.SetDataTypeProperties(DataType.DT_GUID, 0, 0, 0, 0);
            outputColumn.Description = MessageStrings.KeyRecordKeyColumnDescription;
            ManageProperties.AddOutputColumnProperties(outputColumn.CustomPropertyCollection);
            ManageProperties.SetPropertyValue(outputColumn.CustomPropertyCollection, ManageProperties.usageOfColumn, Utilities.usageOfColumnEnum.Key);
            ManageProperties.SetPropertyValue(outputColumn.CustomPropertyCollection, ManageProperties.keyOutputColumnID, -2);

            return(outputColumn);
        }
Exemplo n.º 9
0
        /// <summary>
        /// Add the columns required to the Error Output.
        /// </summary>
        /// <param name="errorOutput">The actual error output</param>
        public static void AddErrorOutputColumns(IDTSOutput100 errorOutput)
        {
            IDTSOutputColumnCollection100 outputColumnCollection = errorOutput.OutputColumnCollection;
            IDTSOutputColumn100           outputColumn           = outputColumnCollection.New();

            outputColumn.Name = MessageStrings.ErrorMessageColumnName;
            outputColumn.SetDataTypeProperties(DataType.DT_WSTR, 4000, 0, 0, 0);
            ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection);
            outputColumn      = outputColumnCollection.New();
            outputColumn.Name = MessageStrings.ColumnDataColumnName;
            outputColumn.SetDataTypeProperties(DataType.DT_WSTR, 4000, 0, 0, 0);
            ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection);
            outputColumn      = outputColumnCollection.New();
            outputColumn.Name = MessageStrings.RowDataColumnName;
            outputColumn.SetDataTypeProperties(DataType.DT_WSTR, 4000, 0, 0, 0);
            ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection);
        }
Exemplo n.º 10
0
        public static void New(this IDTSOutputColumnCollection100 collection, string name, ColumnType columnType, int length = 0, int scale = 0, int precision = 0, int codePage = 0, string description = null)
        {
            if (collection.Cast <IDTSOutputColumn100>().Any(col => col.Name == name))
            {
                return;
            }
            var issueId = collection.New();

            issueId.Name = name;
            if (!string.IsNullOrWhiteSpace(description))
            {
                issueId.Description = description;
            }
            DataType type;

            switch (columnType)
            {
            case ColumnType.String:
                if (length <= 0 || length > 8000)
                {
                    throw new Exception($"Для колонки {name} строкового типа указано некорректное значение длины.");
                }
                if (length <= 4000)
                {
                    type = DataType.DT_WSTR;
                }
                else
                {
                    type = DataType.DT_STR;
                    if (codePage == 0)
                    {
                        throw new Exception($"Для колонки {name} строкового типа с длиной более 4000 необходимо указать кодовую страницу.");
                    }
                }
                break;

            case ColumnType.Date:
                type = DataType.DT_DATE;
                break;

            default:
                throw new Exception($"Неизвестный тип колонки {name}.");
            }
            issueId.SetDataTypeProperties(type, length, scale, precision, codePage);
        }
Exemplo n.º 11
0
        public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols)
        {
            if (!File.Exists(filePath))
            {
                FileStream fs = File.Create(filePath);
                fs.Close();
            }
            else
            {
                throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "File {0} already exists. Select a different file name to avoid overwrite.", filePath));
            }
            int numCols = sourceOutputCols.Count;

            if (numCols == 0)
            {
                throw new InvalidOperationException("Cannot create flat file destination columns because source component has no output columns.");
            }
            colNames      = new String[numCols];
            colTypes      = new wrapper.DataType[numCols];
            colPrecisions = new int[numCols];
            colScales     = new int[numCols];
            colLengths    = new int[numCols];

            for (int i = 0; i < numCols; i++)
            {
                colLengths[i] = sourceOutputCols[i].Length;
                colNames[i]   = sourceOutputCols[i].Name;
                colTypes[i]   = sourceOutputCols[i].DataType;
                // This sample does not support unicode
                if (colTypes[i] == wrapper.DataType.DT_WSTR)
                {
                    colTypes[i] = wrapper.DataType.DT_STR;
                }
                else if (colTypes[i] == wrapper.DataType.DT_NTEXT)
                {
                    colTypes[i] = wrapper.DataType.DT_TEXT;
                }

                colScales[i]     = sourceOutputCols[i].Scale;
                colPrecisions[i] = sourceOutputCols[i].Precision;
            }
        }
Exemplo n.º 12
0
        /// <summary>
        /// Adds the columns that are required to the Number Of Rows output
        /// </summary>
        /// <param name="numberOfRows">the number of rows output</param>
        public static void AddNumberOfRowsOutputColumns(IDTSOutput100 numberOfRows)
        {
            IDTSOutputColumnCollection100 outputColumnCollection = numberOfRows.OutputColumnCollection;
            IDTSOutputColumn100           outputColumn           = outputColumnCollection.New();

            outputColumn.Name = MessageStrings.KeyValueColumnName;
            outputColumn.SetDataTypeProperties(DataType.DT_STR, DefaultStringColumnSize, 0, 0, 1252);
            outputColumn.Description = MessageStrings.KeyValueColumnDescription;
            ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection);
            outputColumn      = outputColumnCollection.New();
            outputColumn.Name = MessageStrings.NumberOfRowsColumnName;
            outputColumn.SetDataTypeProperties(DataType.DT_I8, 0, 0, 0, 0);
            outputColumn.Description = MessageStrings.NumberOfRowsColumnDescription;
            ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection);
            outputColumn      = outputColumnCollection.New();
            outputColumn.Name = MessageStrings.KeyValueStatusColumnName;
            outputColumn.SetDataTypeProperties(DataType.DT_STR, DefaultStringColumnSize, 0, 0, 1252);
            outputColumn.Description = MessageStrings.KeyValueStatusColumnDescription;
            ManageProperties.AddIgnorableColumnProperties(outputColumn.CustomPropertyCollection);
        }
Exemplo n.º 13
0
        public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols)
        {
            if (sourceOutputCols.Count <= 0)
            {
                throw new InvalidOperationException("Source component has empty output");
            }

            StringBuilder sb = new StringBuilder("CREATE TABLE ");

            sb.Append(String.Format(CultureInfo.InvariantCulture, "{0} (", quotedTableName));
            foreach (IDTSOutputColumn100 col in sourceOutputCols)
            {
                String SqlType = ConvertColumnTypeToSqlServer(col.DataType);
                if (SqlType.Length != 0)
                {
                    String formatted = ComposeCreateParamsStringSql(SqlType, col.Length, col.Precision, col.Scale);
                    sb.Append(GetQuotedName(col.Name, prefix, suffix));
                    sb.Append(SqlType);
                    sb.Append(formatted);
                    sb.Append(", ");
                }
                else
                {
                    throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture,
                                                                      "failed to construct sql statement for col {0} with type {1}", col.Name, col.DataType));
                }
            }
            sb.Remove(sb.Length - 2, 2); // remove last ", "
            sb.Append(");");
            String sql = sb.ToString();

            using (OleDbConnection conn = new OleDbConnection())
            {
                conn.ConnectionString = ConnectionString;
                conn.Open();
                OleDbCommand cmd = conn.CreateCommand();
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }
        /// <summary>
        /// Checks to see if the column metadata collection has different column names/numbers than those names passed in as parameter
        /// </summary>
        /// <param name="newcols"></param>
        /// <returns></returns>
        private bool ColumnMetadataChanged(string[] newcols)
        {
            IDTSOutputColumnCollection100 outputcolumns = ComponentMetaData.OutputCollection[0].OutputColumnCollection;

            if (outputcolumns.Count != newcols.GetLength(0))
            {
                return(true);
            }
            else
            {
                for (int n = 0; n < newcols.GetLength(0); n++)
                {
                    if (outputcolumns[n].Name != newcols[n])
                    {
                        return(true);
                    }
                }

                return(false);
            }
        }
Exemplo n.º 15
0
        public void TestBuildOutputColumn(String elementname, BsonValue bsonValue, DataType expectedDataType, int length, int codepage)
        {
            PrivateObject p = new PrivateObject(typeof(MongoDataSource.MongoDataSource));

            IDTSOutput100 output = Mock.Create <IDTSOutput100>(Constructor.Mocked);

            IDTSOutputColumnCollection100 outputCollection = Mock.Create <IDTSOutputColumnCollection100>(Constructor.Mocked);

            IDTSOutputColumn100 expected = Mock.Create <IDTSOutputColumn100>(Constructor.Mocked);

            Mock.Arrange(() => outputCollection.New()).Returns(expected);
            Mock.Arrange(() => output.OutputColumnCollection).Returns(outputCollection);
            Mock.Arrange(() => output.IsErrorOut).Returns(true);

            BsonElement el = new BsonElement(elementname, bsonValue);

            Mock.ArrangeSet(() => expected.Name = Arg.Matches <String>(x => x == elementname));

            IDTSOutputColumn100 actual = (IDTSOutputColumn100)p.Invoke("BuildOutputColumn", new object[] { output, el });

            Mock.Assert(() => expected.SetDataTypeProperties(expectedDataType, length, 0, 0, codepage));
            Mock.ArrangeSet(() => expected.ErrorRowDisposition      = Arg.Matches <DTSRowDisposition>(x => x == DTSRowDisposition.RD_FailComponent)).OccursOnce();
            Mock.ArrangeSet(() => expected.TruncationRowDisposition = Arg.Matches <DTSRowDisposition>(x => x == DTSRowDisposition.RD_FailComponent)).OccursOnce();
        }
Exemplo n.º 16
0
        public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols)
        {
            if (sourceOutputCols.Count <= 0) throw new InvalidOperationException("Source component has empty output");

            StringBuilder sb = new StringBuilder("CREATE TABLE ");
            sb.Append(String.Format(CultureInfo.InvariantCulture, "{0} (", quotedTableName));
            foreach (IDTSOutputColumn100 col in sourceOutputCols)
            {
                String SqlType = ConvertColumnTypeToSqlServer(col.DataType);
                if (SqlType.Length != 0)
                {
                    String formatted = ComposeCreateParamsStringSql(SqlType, col.Length, col.Precision, col.Scale);
                    sb.Append(GetQuotedName(col.Name, prefix, suffix));  
                    sb.Append(SqlType);
                    sb.Append(formatted);
                    sb.Append(", ");
                }
                else
                {
                    throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture,
                        "failed to construct sql statement for col {0} with type {1}", col.Name, col.DataType));
                }
            }
            sb.Remove(sb.Length - 2, 2); // remove last ", "
            sb.Append(");");
            String sql = sb.ToString();
            using (OleDbConnection conn = new OleDbConnection())
            {
                conn.ConnectionString = ConnectionString;
                conn.Open();
                OleDbCommand cmd = conn.CreateCommand();
                cmd.CommandText = sql;
                cmd.ExecuteNonQuery();
                conn.Close();
            }
        }
Exemplo n.º 17
0
 internal BipsProxyIDTSOutputColumnCollection100(IDTSOutputColumnCollection100 innerObject)
 {
     _innerObject = innerObject;
 }
Exemplo n.º 18
0
        public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols)
		{
			if (sourceOutputCols.Count <= 0) throw new InvalidOperationException("Source component has empty output");

			StringBuilder sb = new StringBuilder("CREATE TABLE ");
			sb.Append(String.Format(CultureInfo.InvariantCulture, "{0} (", quotedSheetName));
			foreach (IDTSOutputColumn100 col in sourceOutputCols)
			{
				String SqlType = "nvarchar(255)";
				sb.Append(GetQuotedName(col.Name, prefix, suffix));
				sb.Append(SqlType);
				sb.Append(", ");
			}
			sb.Remove(sb.Length - 2, 2); // remove last ", "
			sb.Append(");");
			String sql = sb.ToString();
			using (OleDbConnection conn = new OleDbConnection())
			{
				conn.ConnectionString = ConnectionString;
				conn.Open();
				OleDbCommand cmd = conn.CreateCommand();
				cmd.CommandText = sql;
				cmd.ExecuteNonQuery();
				conn.Close();
			}
		}
Exemplo n.º 19
0
        private IDTSOutputColumn100 BuildOutputColumn(IDTSOutputColumnCollection100 outputColumnCollection, BsonElement bsonElement)
        {
            IDTSOutputColumn100 outColumn = outputColumnCollection.New();

            // Set the properties of the output column.
            outColumn.Name = bsonElement.Name;

            DataType dt = GetColumnDataType(bsonElement.Value);
            int length = 0;
            int codepage = 0;

            if (dt == DataType.DT_STR) {
                length = 256;
                codepage = 1252;
            }

            outColumn.SetDataTypeProperties(dt, length, 0, 0, codepage);

            return outColumn;
        }
Exemplo n.º 20
0
 public abstract void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols);
Exemplo n.º 21
0
        public override void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols)
        {
            if (!File.Exists(filePath))
            {
                FileStream fs = File.Create(filePath);
                fs.Close();
            }
            else
            {
                throw new InvalidOperationException(String.Format(CultureInfo.InvariantCulture, "File {0} already exists. Select a different file name to avoid overwrite.", filePath));
            }
            int numCols = sourceOutputCols.Count;
            if (numCols == 0)
            {
                throw new InvalidOperationException("Cannot create flat file destination columns because source component has no output columns.");
            }
            colNames = new String[numCols];
            colTypes = new wrapper.DataType[numCols];
            colPrecisions = new int[numCols];
            colScales = new int[numCols];
            colLengths = new int[numCols];

            for (int i = 0; i < numCols; i++)
            {
                colLengths[i] = sourceOutputCols[i].Length;
                colNames[i] = sourceOutputCols[i].Name;
                colTypes[i] = sourceOutputCols[i].DataType;
                // This sample does not support unicode
                if (colTypes[i] == wrapper.DataType.DT_WSTR)
                {
                    colTypes[i] = wrapper.DataType.DT_STR;
                }
                else if (colTypes[i] == wrapper.DataType.DT_NTEXT)
                {
                    colTypes[i] = wrapper.DataType.DT_TEXT;
                }

                colScales[i] = sourceOutputCols[i].Scale;
                colPrecisions[i] = sourceOutputCols[i].Precision;
            }

        }
        private DTSValidationStatus ValidateOutputColumns(IDTSOutputColumnCollection100 outputColumnCollection, DTSValidationStatus oldStatus)
        {
            DTSValidationStatus returnStatus = oldStatus;

            foreach (IDTSOutputColumn100 outputColumn in outputColumnCollection)
            {
                returnStatus = ValidateOutputColumn(outputColumn, returnStatus);
            }

            return returnStatus;
        }
 public abstract void CreateDestination(IDTSOutputColumnCollection100 sourceOutputCols);
        public void AddPathsAndConnectColumns(Hashtable colPairs)
        {
            IDTSOutput100 srcOutput = srcComp.OutputCollection[0];
            IDTSOutputColumnCollection100 srcOutputCols = srcOutput.OutputColumnCollection;
            IDTSInput100 destInput = destComp.InputCollection[0];
            IDTSInputColumnCollection100            destInputCols = destInput.InputColumnCollection;
            IDTSExternalMetadataColumnCollection100 destExtCols   = destInput.ExternalMetadataColumnCollection;

            Hashtable destColtable = new Hashtable(destExtCols.Count);

            foreach (IDTSExternalMetadataColumn100 extCol in destExtCols)
            {
                destColtable.Add(extCol.Name, extCol);
            }

            bool useMatch = (colPairs != null && colPairs.Count > 0);
            // colConvertTable stores a pair of columns which need a type conversion
            // colConnectTable stores a pair of columns which dont need a type conversion and can be connected directly.
            Hashtable colConvertTable = new Hashtable(srcOutputCols.Count);
            Hashtable colConnectTable = new Hashtable(srcOutputCols.Count);

            foreach (IDTSOutputColumn100 outputCol in srcOutputCols)
            {
                // Get the column name to look for in the destination.
                // Match column by name if match table is not used.
                String colNameToLookfor = String.Empty;
                if (useMatch)
                {
                    colNameToLookfor = (String)colPairs[outputCol.Name];
                }
                else
                {
                    colNameToLookfor = outputCol.Name;
                }

                IDTSExternalMetadataColumn100 extCol = (String.IsNullOrEmpty(colNameToLookfor)) ? null : (IDTSExternalMetadataColumn100)destColtable[colNameToLookfor];
                // Does the destination column exist?
                if (extCol != null)
                {
                    // Found destination column, but is data type conversion needed?
                    if (NeedConvert(outputCol.DataType, extCol.DataType))
                    {
                        colConvertTable.Add(outputCol.ID, extCol);
                    }
                    else
                    {
                        colConnectTable.Add(outputCol.ID, extCol);
                    }
                }
            }
            if (colConvertTable.Count > 0)
            {
                // add convert component
                AddConvertComponent(colConvertTable, colConnectTable);
                pipeline.PathCollection.New().AttachPathAndPropagateNotifications(convertComp.OutputCollection[0], destInput);
            }
            else
            {
                // Convert transform not needed. Connect src and destination directly.
                pipeline.PathCollection.New().AttachPathAndPropagateNotifications(srcOutput, destInput);
            }

            IDTSVirtualInput100 destVirInput = destInput.GetVirtualInput();

            foreach (object key in colConnectTable.Keys)
            {
                int colID = (int)key;
                IDTSExternalMetadataColumn100 extCol = (IDTSExternalMetadataColumn100)colConnectTable[key];
                // Create an input column from an output col of previous component.
                destVirInput.SetUsageType(colID, DTSUsageType.UT_READONLY);
                IDTSInputColumn100 inputCol = destInputCols.GetInputColumnByLineageID(colID);
                if (inputCol != null)
                {
                    // map the input column with an external metadata column
                    destDesignTimeComp.MapInputColumn(destInput.ID, inputCol.ID, extCol.ID);
                }
            }
        }