Пример #1
0
        private void AddInputColumns(IEnumerable <string> inputColNames)
        {
            var input = _md.InputCollection[ComponentConstants.NAME_INPUT_LANE_PARAMS];


            // Only add them if the inputlan is connected.
            if (!input.IsAttached)
            {
                _md.FireWarning(0, _md.Name, "Cannot add inputs because input lane is not attached.", null, 0);
                return;
            }

            // Clear inputs
            input.InputColumnCollection.RemoveAll();
            var component = _md.Instantiate();

            // Set all virtualinputs as READONLY
            foreach (IDTSVirtualInputColumn100 vcol in _virtualInputLane.VirtualInputColumnCollection)
            {
                component.SetUsageType(input.ID, _virtualInputLane, vcol.LineageID, DTSUsageType.UT_READONLY);
            }

            // For each virtual input selected, add a physical input
            foreach (var colname in inputColNames)
            {
                var incol = input.InputColumnCollection.New();
                incol.LineageID = _virtualInputLane.VirtualInputColumnCollection[colname].LineageID;
            }
        }
Пример #2
0
        /// <summary>
        /// fires an SSIS event
        /// </summary>
        /// <param name="ComponentMetaData">componets SSIS metadata</param>
        /// <param name="eventType">event type</param>
        /// <param name="sqlType">sql type (always</param>
        /// <param name="description">SSIS event description</param>
        private static void Fire(IDTSComponentMetaData100 ComponentMetaData, Type eventType, int sqlType, string description)
        {
            bool cancel = false;

            switch (eventType)
            {
            case Type.Information:
                ComponentMetaData.FireInformation(sqlType, ComponentMetaData.Name, description, "", 0, ref cancel);
                break;

            case Type.Progress:
                throw new NotImplementedException("Progress messages are not implemented");

            case Type.Warning:
                ComponentMetaData.FireWarning(sqlType, ComponentMetaData.Name, description, string.Empty, 0);
                break;

            case Type.Error:
                ComponentMetaData.FireError(sqlType, ComponentMetaData.Name, description, string.Empty, 0, out cancel);
                break;

            default:
                ComponentMetaData.FireError(sqlType, ComponentMetaData.Name, description, string.Empty, 0, out cancel);
                break;
            }
        }
Пример #3
0
        private void AddOutputColumns(IEnumerable <IOMapEntry> IoMap)
        {
            _md.OutputCollection[0].OutputColumnCollection.RemoveAll();

            var input = _md.InputCollection[0];

            // Aggiungi tante colonne di output quante sono le colonne di input
            foreach (IDTSInputColumn100 i in input.InputColumnCollection)
            {
                IDTSOutputColumn100 col = _md.OutputCollection[0].OutputColumnCollection.New();
                col.Name = i.Name;
                col.SetDataTypeProperties(i.DataType, i.Length, i.Precision, i.Scale, i.CodePage);
            }

            // Aggiungi le colonne di output derivanti dall'interpretazione di JSON
            foreach (IOMapEntry e in IoMap)
            {
                if (e.InputFieldLen < 0)
                {
                    // FIXME TODO
                    _md.FireWarning(0, _md.Name, "A row of the IO configuration presents a negative value, which is forbidden.", null, 0);
                }

                // Creo la nuova colonna descritta dalla riga e la configuro in base ai dettagli specificati
                IDTSOutputColumn100 col = _md.OutputCollection[0].OutputColumnCollection.New();
                col.Name = e.OutputColName;

                // There might be some possible errors regarding data lenght. We try to correct them here.
                // If length > 4000 and type is string, put TEXT datatype.
                if (e.OutputColumnType == Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_WSTR && (e.InputFieldLen > 4000 || e.InputFieldLen == 0))
                {
                    // FIXME TODO: this must be done directly within the UI
                    // e.OutputColumnType = Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_TEXT;
                    _md.FireWarning(0, _md.Name, string.Format("Column {0} is supposed to be longer than 4000 chars, so DT_WSTR is not a suitable column type. Instead, DT_TEXT has been selected.", e.OutputColName), null, 0);
                    // TODO: parametrize the codepage
                    col.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType.DT_TEXT, 0, 0, 0, 1252);
                }
                else
                {
                    col.SetDataTypeProperties(e.OutputColumnType, e.InputFieldLen, 0, 0, 0);
                }
            }
        }