为SSIS编写简单的同步转换组件
2009-09-19 00:00:00 来源:WEB开发网 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());
}
}
}
更多精彩
赞助商链接