如何获取IDTSComponentMetadata100的PipelineComponent

时间:2011-04-12 13:54:11

标签: ssis

我正在为SSIS自定义管道组件编写UI编辑器。

当BIDS调用编辑器时,它会将IDTSComponentMetadata100实例传递给编辑器。如何获取对我的(托管)PipelineComponent派生实例的引用?

2 个答案:

答案 0 :(得分:2)

我相信你想做这样的事情:

void Initialize(
    IDTSComponentMetaData100 dtsComponentMetadata,
    IServiceProvider serviceProvider
){
    IDtsPipelineEnvironmentService pipelineService = (IDtsPipelineEnvironmentService)serviceProvider.GetService(typeof(IDtsPipelineEnvironmentService));
    IDTSPipeline100 mainPipe = pipelineService.Pipeline;
    // access mainPipe.PathCollection etc
    TaskHost pipelineTaskHost = pipelineService.PipelineTaskHost;
    MainPipe mainPipe2 = pipelineTaskHost.InnerObject as MainPipe;
    // that is less direct but should work too
}

您可以使用serviceProvider执行其他有趣的操作,例如检查包的连接或变量,方法是将其他类型传递给GetService。有关详细信息,请参阅SQL2008R2 BOL

答案 1 :(得分:0)

通过管道服务尝试了路由,但我的自定义数据流组件(用C#开发)不在IDTSPipeline100.PathCollection中 - 标准的Microsoft组件。

深入挖掘,我尝试使用mainPipe.GetObjectByID(componentID),但它返回一个COM对象而不是C#/ Managed对象。尝试投掷“你无法从COM转换为C#Managed”例外。

我无法确认,但强烈怀疑我的C#/托管自定义组件未显示在PathCollection中,因为它们是C#/托管组件与COM。