2012-09-25 44 views
3

我试图创建我的第一个数据流组件,将采取输入地址运行它通过PAF api并吐出格式正确的地址和原始输入列从一个文件源或数据库表。C#的SSIS数据流组件 - 创建自定义输入列

我需要以特定格式提供源输入地址,所以我需要用户将源输入列映射到特定的自定义输入列。我能够使用input.ExternalMetadataColumnCollection创建自定义输入列,并且工作正常。不过,我现在被告知,我需要提供将源文件中的所有可用列作为输出列的选项。

我已经尝试创建出现在列映射选项卡中的其他输入列,但我并非都可用的所有源输入列。以下是我到目前为止所尝试的。任何建议将不胜感激。所以我的问题是如何添加额外的自定义输入列以及包括所有源列?

  IDTSExternalMetadataColumnCollection100 externalInput = input.ExternalMetadataColumnCollection; 
     externalInput.IsUsed = true; 

     IDTSExternalMetadataColumn100 externalInputColumn = externalInput.New(); 
     externalInputColumn.Name = constInputAddressLineOne; 
     externalInputColumn.DataType = DataType.DT_WSTR; 

     externalInputColumn = externalInput.New(); 
     externalInputColumn.Name = constInputAddressLineTwo; 
     externalInputColumn.DataType = DataType.DT_WSTR; 
+0

重申一下,您的组件总是会向输出集合中添加N个新列,但您可能还需要保留原始列? – billinkc

+0

我需要保留原始源输入列和值。我需要确保一些输入列被映射到自定义输入列。即类似源输入列addressLine1,addressLine2,addressLine3被映射到自定义输入列AddressLineOne,AddressLineTwo,AddrssLineThree。我需要这样做,因为地址必须以paf api的特定格式才能正确工作,即在邮编之前的HouseNo。 – zeencat

+0

走出组件,你会得到原始的addressLine1列(lineageId 100),但是你也会有你的新列AddressLineOne(lineageId 200),它是从你的组件生成的并且包含更正后的地址。自从我编写了自定义组件以来,我一直在努力确保我理解这个问题。 – billinkc

回答

2

我找到了一种方法。如果你能提出一个更好的方式,我就会全神贯注。我只需要将我的自定义输入列名称设置为只读。我使用了以下内容。

public override void OnInputPathAttached(int inputID) 
    { 
     IDTSInput100 input = ComponentMetaData.InputCollection[0]; 

     IDTSVirtualInput100 vInput = input.GetVirtualInput(); 

     IDTSExternalMetadataColumnCollection100 externalColumnCollection = input.ExternalMetadataColumnCollection; 
     IDTSExternalMetadataColumn100 externalColumn;     

     foreach (IDTSVirtualInputColumn100 vCol in vInput.VirtualInputColumnCollection) 
     {    
      externalColumn = externalColumnCollection.New(); 
      externalColumn.Name = vCol.Name; 
      externalColumn.DataType = vCol.DataType;    
     } 
    } 
相关问题