【发布时间】:2018-09-14 06:08:10
【问题描述】:
我正在尝试为 SSIS 包构建自定义转换任务。我一直在关注如何执行此操作的示例,以便更好地了解所有部分如何协同工作以构建我自己的。我已经到了尝试在数据流任务中使用自定义任务的地步。
在 SSDT 2012(使用 VS 2012 Shell)中,我可以将它拖到设计画布上,将其连接到我的输入和输出,然后双击它以查看高级属性。
但是,在 SSDT 2015(使用 VS 2015 社区)中,任务按预期显示在 SSIS 工具箱中,但是当我将其拖到设计画布上时,我收到以下错误。
在将代码附加到 SSDT 2015 进程以进行调试时,它会在 ProvideComponentProperties() 方法中阻塞(有关代码 sn-p,请参见下文)。
代码片段:
public override void ProvideComponentProperties()
{
// Set component information
ComponentMetaData.Name = "CustomEmailValidator";
ComponentMetaData.Description = "Transformation to validate email using Regular Expressions.";
// Reset the component
// Deletes each Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSInput100 and IDTSOutput100 from the component
RemoveAllInputsOutputsAndCustomProperties();
// Add an input object
IDTSInput100 inputObject = ComponentMetaData.InputCollection.New();
inputObject.Name = "InputToCustomEmailValidator";
inputObject.ErrorRowDisposition = DTSRowDisposition.RD_FailComponent;
// Add an output object
IDTSOutput100 outputObject = ComponentMetaData.OutputCollection.New();
outputObject.Name = "OutputFromCustomEmailValidator";
outputObject.SynchronousInputID = inputObject.ID; // Synchronous Transform
// Add an error object
AddErrorOutput("ErrorFromCustomEmailValidator", inputObject.ID, outputObject.ExclusionGroup);
}
错误 #1:
====================================
无法将组件添加到数据流任务。不能 初始化组件。存在潜在问题 提供组件属性方法。 (微软视觉工作室)
====================================
数据流任务 [CustomEmailValidator [47]] 出错: System.InvalidCastException:无法转换类型的 COM 对象 'System.__ComObject' 到接口类型 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100'。 此操作失败,因为 COM 上的 QueryInterface 调用 带有 IID 的接口组件 '{887BD061-82D4-4F06-A222-337D42E7F896}' 失败,原因如下 错误:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))。在 System.StubHelpers.StubHelpers.GetCOMIPFromRCW(对象 objSrc,IntPtr pCPCMD, IntPtr& ppTarget, Boolean& pfNeedsRelease) 在 Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100.set_Name(字符串 pbstrName) 在 CustomEmailValidator.CustomEmailValidatorTransform.ProvideComponentProperties() 在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProvideComponentProperties(IDTSManagedComponentWrapper100 包装器)
====================================
无法将“System.__ComObject”类型的 COM 对象转换为接口 类型 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100'。 此操作失败,因为 COM 上的 QueryInterface 调用 带有 IID 的接口组件 '{887BD061-82D4-4F06-A222-337D42E7F896}' 失败,原因如下 错误:不支持此类接口(HRESULT 异常:0x80004002 (E_NOINTERFACE))。 (Microsoft.SqlServer.DTSPipelineWrap)
------------------ 节目位置:
在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HandleUserException(异常 吃 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProvideComponentProperties(IDTSManagedComponentWrapper100 包装器)在 Microsoft.SqlServer.Dts.Pipeline.Wrapper.CManagedComponentWrapperClass.ProvideComponentProperties() 在 Microsoft.DataTransformationServices.Design.PipelineTaskDesigner.AddNewComponent(字符串 clsid, Boolean throwOnError, Boolean select)
编辑#1
将 TargetServerVersion 属性(在 Integration Services 项目配置属性中)更新为 SQL Server 2016(从 2017 年开始)。这样做让我克服了上面的错误,但是,导致了一个新的错误。进展吗?
错误 #2:
====================================
无法将组件添加到数据流任务。不能 初始化组件。存在潜在问题 提供组件属性方法。 (微软视觉工作室)
====================================
数据流任务 [CustomEmailValidator [41]] 出错: System.MissingMethodException:找不到方法: 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100 Microsoft.SqlServer.Dts.Pipeline.PipelineComponent.get_ComponentMetaData()'。 在 CustomEmailValidator.CustomEmailValidatorTransform.ProvideComponentProperties() 在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProvideComponentProperties(IDTSManagedComponentWrapper100 包装器)
====================================
找不到方法: 'Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSComponentMetaData100 Microsoft.SqlServer.Dts.Pipeline.PipelineComponent.get_ComponentMetaData()'。 (Microsoft.SqlServer.DTSPipelineWrap)
------------------ 节目位置:
在 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HandleUserException(异常 吃 Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostProvideComponentProperties(IDTSManagedComponentWrapper100 包装器)在 Microsoft.SqlServer.Dts.Pipeline.Wrapper.CManagedComponentWrapperClass.ProvideComponentProperties() 在 Microsoft.DataTransformationServices.Design.PipelineTaskDesigner.AddNewComponent(字符串 clsid, Boolean throwOnError, Boolean select)
【问题讨论】:
标签: c# ssis sql-server-data-tools