WEB开发网
开发学院数据库MSSQL Server 为SSIS编写简单的同步转换组件 阅读

为SSIS编写简单的同步转换组件

 2009-09-19 00:00:00 来源:WEB开发网   
核心提示: publicoverridevoidProvideComponentProperties(){base.ProvideComponentProperties();}我们对其加以修改,我们需要知道的一个基础知识就是:任何一个转换,为SSIS编写简单的同步转换组件(2),即便不做任何事情,它也自动具

    public override void ProvideComponentProperties()
    {
      base.ProvideComponentProperties();
    }

我们对其加以修改。我们需要知道的一个基础知识就是:任何一个转换,即便不做任何事情,它也自动具有一个默认的输入和输出。

我们在这个代码里面给默认的输入和输出做一个重命名。这样做的目的是让它们更加形象

    /// <summary>
    /// 这个方法提供组件必须的一些属性。
    /// 这里主要给默认的输入和输出重命名,让它更加形象
    /// </summary>
    public override void ProvideComponentProperties()
    {
      base.ProvideComponentProperties();
      ComponentMetaData.InputCollection[0].Name = "大写转换输入";
      ComponentMetaData.OutputCollection[0].Name = "大写转换输出";
      //ComponentMetaData.OutputCollection[1].SynchronousInputID = ComponentMetaData.InputCollection[0].ID;
      //如果调用了base.ProvideComponentProperties,则可以省略这句代码
    }

第二步:我们重写PreExecute方法,这个方法为执行做准备。我们这里的需求比较简单,就是检查所有最终确定的输入列,如果他们的类型是字符型(不管是STR还是WSTR),我们就对它们做一个记号

    List<int> _columns = new List<int>();//这个集合来保存需要处理的列的索引号
    /// <summary>
    /// 这个方法是ProcessInput之前的准备工作。
    /// 我们检测所有输入列中类型为字符型的,并将它的索引号记录起来
    /// 为了让ProcessInput能使用到这个信息,我们定义一个公用变量
    /// </summary>
    public override void PreExecute()
    {
      IDTSInput90 input = ComponentMetaData.InputCollection[0];
      IDTSInputColumnCollection90 columns = input.InputColumnCollection;
      foreach (IDTSInputColumn90 item in columns)
      {
        if (item.DataType == DataType.DT_WSTR || item.DataType == DataType.DT_STR)
        {
          _columns.Add(BufferManager.FindColumnByLineageID(input.Buffer, item.LineageID));
        }
      }
    }

 

第三步:我们重写ProcessInput方法。这个方法会被数据流任务多次调用。我们就是不断地进行处理,直到数据源不再能提供数据为止。

    public override void ProcessInput(int inputID, PipelineBuffer buffer)
    {
      while (buffer.NextRow())//从这句话可以理解,其实虽然说是同步,但也可能是缓冲了几行后才处理,而不一定是一行处理一次
      {
        foreach (int index in _columns)
        {
          string str = buffer.GetString(index);
          buffer.SetString(index, str.ToUpper());
        }
      }
    }

上一页  1 2 3 4  下一页

Tags:SSIS 编写 简单

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接