⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 customcomponent.cs

📁 < SQL Server2005程序设计>
💻 CS
字号:
using Microsoft.SqlServer.Dts.Pipeline;
using Microsoft.SqlServer.Dts.Pipeline.Wrapper;
using Microsoft.SqlServer.Dts.Runtime.Wrapper;

namespace SSISComponent
{
    [
        DtsPipelineComponent(DisplayName = "Map Month", ComponentType = ComponentType.Transform)
    ]
    public class MapMonthComponent : PipelineComponent
    {
        private int inputColumnBufferIndex = -1;
        private int outputColumnBufferIndex = -1;
        private string[] monthNames = new string[12]{"Jan", "Feb", "Mar", "Apr", "May", "June", "July",
            "Aug", "Sept", "Oct", "Nov", "Dec"};

        public override void ProvideComponentProperties()
        {
            // Set the name
            ComponentMetaData.Name = "Map Month";

            // Support one input
            ComponentMetaData.InputCollection.RemoveAll();
            IDTSInput90 input = ComponentMetaData.InputCollection.New();
            input.Name = "MapMonthInput";

            // Support one output
            ComponentMetaData.OutputCollection.RemoveAll();
            IDTSOutput90 output = ComponentMetaData.OutputCollection.New();
            output.Name = "MapMonthOutput";
            output.SynchronousInputID = input.ID;

            // Add an output column
            IDTSOutputColumn90 outputColumn = output.OutputColumnCollection.New();
            outputColumn.Name = "Month";
            outputColumn.SetDataTypeProperties(DataType.DT_WSTR, 7, 0, 0, 0);
        }

        public override DTSValidationStatus Validate()
        {
            DTSValidationStatus validationStatus = base.Validate();

            if (validationStatus != DTSValidationStatus.VS_ISVALID)
            {
                return validationStatus;
            }

            // Check the number of input
            IDTSInputCollection90 inputCollection = ComponentMetaData.InputCollection;
            if (inputCollection.Count != 1)
            {
                bool cancel = false;
                ComponentMetaData.FireError(-1, ComponentMetaData.IdentificationString, "One input is supported.", "", 0, out cancel);
                return DTSValidationStatus.VS_ISBROKEN;
            }

            // Check the number of input columns
            IDTSInputColumnCollection90 inputColumnCollection = ComponentMetaData.InputCollection[0].InputColumnCollection;
            if (inputColumnCollection.Count != 1)
            {
                bool cancel = false;
                ComponentMetaData.FireError(-2, ComponentMetaData.IdentificationString, "One input column is supported.", "", 0, out cancel);
                return DTSValidationStatus.VS_ISBROKEN;
            }

            // Check the data type of the input column.
            if (inputColumnCollection[0].DataType != DataType.DT_I4)
            {
                bool cancel = false;
                ComponentMetaData.FireError(-3, ComponentMetaData.IdentificationString, "The input column is not of data type DT_I4", "", 0, out cancel);
                return DTSValidationStatus.VS_ISBROKEN;
            }

            return DTSValidationStatus.VS_ISVALID;
        }

        public override void PreExecute()
        {
            // Get the buffer column index for the input column
            IDTSInput90 input = ComponentMetaData.InputCollection[0];
            IDTSInputColumn90 inputColumn = input.InputColumnCollection[0];
            inputColumnBufferIndex = BufferManager.FindColumnByLineageID(input.Buffer, inputColumn.LineageID);

            // Get the buffer column index for the output column
            IDTSOutputColumn90 outputColumn = ComponentMetaData.OutputCollection[0].OutputColumnCollection[0];
            outputColumnBufferIndex = BufferManager.FindColumnByLineageID(input.Buffer, outputColumn.LineageID);
        }

        public override void ProcessInput(int inputID, PipelineBuffer buffer)
        {
            if (!buffer.EndOfRowset)
            {
                while (buffer.NextRow())
                {
                    // Get the month in the input column
                    int month = buffer.GetInt32(inputColumnBufferIndex);

                    // Transform the month and put it in the output column
                    if (month < 1 || month > 12)
                    {
                        buffer.SetString(outputColumnBufferIndex, "Invalid");
                    }
                    else
                    {
                        buffer.SetString(outputColumnBufferIndex, monthNames[month - 1]);
                    }
                }
            }
        }       
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -