我正在尝试构建一个简单的自定义 SSIS 组件,它查看单个输入列并对其进行验证,并根据每一行的值创建一个 bool 类型的输出列。
我已经成功地构建了一个更简单的组件,它接受一个值并转换它:不需要摆弄输出列。在这种情况下,我需要接收一个字符串并输出一个 bool 值,并且该组件需要知道它输出一个 bool 值,以便我可以将该值提供给条件拆分。
我正在努力添加输出列。基于code samples from Microsoft ,我这样做了:
public override DTSValidationStatus Validate()
{
IDTSOutput100 output = ComponentMetaData.OutputCollection[0];
IDTSOutputColumn100 outputcol = output.OutputColumnCollection.New();
outputcol.Name = "IsValid";
outputcol.SetDataTypeProperties(DataType.DT_BOOL, 0, 0, 0, 0);
return DTSValidationStatus.VS_ISVALID;
}
然后我尝试在 ProcessInput 步骤中填充它:
public override void ProcessInput(int inputID, PipelineBuffer buffer)
{
while (buffer.NextRow())
{
string str = buffer.GetString(0);
buffer.SetBoolean(0, IsValid(str)); // validation code not relevant
}
}
当我尝试在包中使用此组件时,出现此错误:
The component has detected potential metadata corruption during validation.
Error at Data Flow Task [Uppercase [24]]: System.MissingMethodException: Method not found: 'Void Microsoft.SqlServer.Dts.Pipeline.Wrapper.IDTSOutputColumn100.SetDataTypeProperties(Microsoft.SqlServer.Dts.Runtime.Wrapper.DataType, Int32, Int32, Int32, Int32)'.
at EmailValidation.Uppercase.Validate()
at Microsoft.SqlServer.Dts.Pipeline.ManagedComponentHost.HostValidate(IDTSManagedComponentWrapper100 wrapper)
搜索此错误消息未找到任何有值(value)的信息。
在原始示例和其他一些在线教程中,添加输出列是通过循环输入列并为每个列添加一个额外的输出来完成的。我试过这个并得到同样的错误。
我还尝试将输出列代码从 Validate
移至 OnInputPathAttached
,但仍然会产生相同的错误。
我做错了什么?
最佳答案
经调查,这似乎是 Visual Studio 2015 的 SQL Server 数据工具中的错误。我在 Visual Studio 2013 的 Integration Services 包中构建、部署和使用了带有自定义输出列的自定义组件。但是,同一个工具在 2015 年部署在包中会导致所述错误。
关于c# - 在自定义 SSIS 组件中找不到方法 SetDataTypeProperties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42367129/