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

Column names are not loading correctly c# scripting in SSIS

我是使用 SSIS 在 C# 中编写脚本的新手,所以我不确定为什么会这样。我正在使用脚本组件来读取一些文件。我的带有 _“下划线”的列名显示不正确

错误代码是这样的。 严重性代码描述项目文件行抑制状态 错误 CS1061 'Output0Buffer' 不包含 'funded_amnt' 的定义,并且无法找到接受类型 'Output0Buffer' 的第一个参数的可访问扩展方法 'funded_amnt'(您是否缺少 using 指令或汇编参考?)

当您向脚本任务添加列时,我并不知道这些规则,但是,在数据流列名称与脚本任务中的可用名称之间发生了转换。鉴于您的数据流中带有下划线的每一列都被报告为错误,我猜这是列名中的有效字符之一,它不允许出现在缓冲区的字段名称中。

如果我猜的话,下划线会被删除,因为脚本中的每一列都添加了一个 _IsNull 属性,并且多个下划线可能会使某处的逻辑复杂化。

给定源查询

SELECT 1 AS col1, 2 AS col_underscore_2;

我的数据流任务中有两列名为 col1col_underscore_2。将两者添加到脚本任务

这是我的输入缓冲区的结果 auto-generated 定义 (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 或将光标放在 public override void Input0_ProcessInputRow(Input0Buffer Row) 中的 Input0Buffer 上,然后按 F12(转到定义)

如果您想查看自动生成的列,

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

我假设您正在尝试自动生成脚本任务,并且您需要考虑到这一点。此外,如果 LendingClassRow 可能为空,则您需要具有类似

的逻辑
if(LendingClassRow.verification_status != null)
{
    Output0Buffer.verificationstatus = LendingClassRow.verification_status
}
// This entire block is not needed as it will be the default if no value is
// assigned but I call it out here in case future readers have a need to
// muck with it
else
{
    Output0Buffer.verificationstatus_IsNull = true;
}