问题描述
我是使用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;
我在数据流任务中得到了两列,分别为col1
和col_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)