列名称未正确加载SSIS中的C#脚本

问题描述

我是使用SSIS进行C#脚本编写的新手,所以我不确定为什么会这样。我正在使用脚本组件来读取一些文件。我的带有_“下划线”的列名显示不正确 https://cloud.google.com/ai-platform/notebooks/docs/iam

错误代码是这个。 严重性代码说明项目文件行抑制状态 错误CS1061'Output0Buffer'不包含'funded_amnt'的定义,并且找不到可以接受的扩展方法'funded_amnt'接受类型为'Output0Buffer'的第一个参数(您是否缺少using指令或程序集引用?)

解决方法

当您将列添加到脚本任务时,我不知道规则不定,但是,数据流列名与脚本任务中的可用名称之间会发生转换。考虑到据报告数据流中每个带有下划线的列都是错误的,我猜测这是列名称中的有效字符之一,不允许在缓冲区的字段名称中使用。

如果我要猜测的话,下划线会被消除,因为脚本中的每一列都添加了_IsNull属性,也许多个下划线会使逻辑复杂化。

给出源查询

SELECT 1 AS col1,2 AS col_underscore_2;

我在数据流任务中得到了两列,分别为col1col_underscore_2。将两者都添加到脚本任务中

这是输入缓冲区(BufferWrapper.cs)的自动生成的结果

public class Input0Buffer: ScriptBuffer

{
    public Input0Buffer(PipelineBuffer Buffer,int[] BufferColumnIndexes,OutputNameMap OutputMap)
        : base(Buffer,BufferColumnIndexes,OutputMap)
    {
    }

    public Int32 col1
    {
        get
        {
            return Buffer.GetInt32(BufferColumnIndexes[0]);
        }
    }
    public bool col1_IsNull
    {
        get
        {
            return IsNull(0);
        }
    }

    public Int32 colunderscore2
    {
        get
        {
            return Buffer.GetInt32(BufferColumnIndexes[1]);
        }
    }
    public bool colunderscore2_IsNull
    {
        get
        {
            return IsNull(1);
        }
    }

    new public bool NextRow()
    {
        return base.NextRow();
    }

    new public bool EndOfRowset()
    {
        return base.EndOfRowset();
    }

}

值得注意的是,它会将col_underscore_2修改为内部列名colunderscore2。如果要查看相同的内容,请在解决方案资源管理器中双击BufferWrapper.cs或将光标放在Input0Buffer的{​​{1}}上,然后按F12(转到“定义”)

如果要查看自动生成的列,

我认为缓冲区名称也有类似的逻辑。

我假设您正在尝试自动生成脚本任务,并且需要考虑这一点。另外,如果LendingClassRow可以为null,则需要使用类似

的逻辑
public override void Input0_ProcessInputRow(Input0Buffer Row)