【问题标题】:C# SSIS Data Flow Component - Creating custom input columnsC# SSIS 数据流组件 - 创建自定义输入列
【发布时间】:2012-09-17 06:02:04
【问题描述】:

我正在尝试创建我的第一个数据流组件,该组件将采用输入地址通过 PAF api 运行它并从文件源或 db 表中输出格式正确的地址和原始输入列。

我需要以特定格式提供源输入地址,因此我需要用户将源输入列映射到特定的自定义输入列。我能够使用 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;

【问题讨论】:

  • 重申一下,您的组件将始终向输出集合添加 N 个新列,但您可能还需要保留原始列?
  • 我需要保留原始源输入列和那里的值。我需要确保某些输入列映射到自定义输入列。即,像源输入列 addressLine1、addressLine2、addressLine3 映射到自定义输入列 AddressLineOne、AddressLineTwo、AddrssLineThree。我需要这样做,因为地址必须采用特定格式才能使 paf api 正常工作,即邮政编码之前的 HouseNo。
  • 退出组件后,您将拥有原始 addressLine1 列 (lineageId 100),但您还将拥有从组件生成并包含更正后的新列 AddressLineOne (lineageId 200)地址。自从我编写自定义组件以来已经有一段时间了,所以我试图确保我理解这个问题。
  • 是的,我需要用户将 addressLine1 列映射到新列 AddressLineOne。我发现我可以使用 input.ExternalMetaDataColumnCollection 生成自己的列,但我丢失了源生成的输入列。当我尝试使用 IDTSInputColumnCollection 添加一些新的输入列时,源列丢失了。
  • +1 仅仅是因为我在互联网上的其他任何地方都找不到如何指定自定义输入列!

标签: c# ssis


【解决方案1】:

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

 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;               
        }
    }

【讨论】:

    猜你喜欢
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多