c# - 在自定义 SSIS 组件中找不到方法 SetDataTypeProperties

标签 c# sql-server ssis

我正在尝试构建一个简单的自定义 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/

相关文章:

c# - 如何在 SSIS 的脚本组件中获取列值?

c# - 如何在 DateTime 中将时间设置为零?

sql - 如何从表格中获取最高值,然后是最低值,然后是第二高值,然后是第二低值,依此类推

python - 使用外键添加两行 - SQL

sql-server - 有关具有庞大数据集的数据库结构的建议

sql-server-2008 - SSIS包保存在哪里?

sql-server - SSIS 平面文件源行重构

c# - 从弹出窗口返回一个对象

c# - ASP.NET:整个站点都可以访问的变量

c# - 面试谜语: accessing a private data member