C# SSIS异步转换保留上一列值并设置为下一行

C# SSIS异步转换保留上一列值并设置为下一行,c#,asynchronous,ssis,transformation,script-component,C#,Asynchronous,Ssis,Transformation,Script Component,在SSIS中使用异步转换时只会遇到一个问题。为了简化问题,假设我只有两个输出,Name和Id 我的C代码是: string name = ""; string Id = ""; if(...) // read the first line to get Name and partial value of "Id" { Output0Buffer.AddRow(); Output0Buffer.Name = Row.Name.Trim(); Id = Row.Id.Trim(); }

在SSIS中使用异步转换时只会遇到一个问题。为了简化问题,假设我只有两个输出,Name和Id

我的C代码是:

string name = "";
string Id = "";

if(...)   // read the first line to get Name and partial value of "Id"
{
Output0Buffer.AddRow();

Output0Buffer.Name = Row.Name.Trim();

Id = Row.Id.Trim();

}

else if(...)   //read the 2nd line to get the rest part of "Id"
{
  Output0Buffer.Id = Id + Row.Id.Trim();
}
因此,理想情况下,当两个输出填充Output0Buffer时,将输出Name和Id,但问题是,当第2行读入缓冲区时,它会再次初始化字符串Id,因此串联Output0Buffer.Id=Id+Row.Id.Trim;不起作用。它的工作原理与Id的+其余部分一样,因为第一部分被初始化,第二部分是当前值


我想在这一刻坚持使用脚本组件转换,有没有办法解决这个问题

@Brad的思路是正确的,但是您需要将Id声明移动到类级别的成员,而不是在。。。SendOutputBuffer或其他任何名称

如果使用If语句,则需要测试名称是否与类级成员名称匹配

您需要确保对OutputBuffer0列具有读/写访问权限。我记不起异步组件的默认值是什么-可能只是写

总而言之,你把所有的ID值合并成一个大字符串,并把它和键名关联起来,是吗


哦,为了提高性能,最好将Id声明为StringBuilder,并在将其分配给输出缓冲区时仅强制转换为字符串

我没有使用输出缓冲区,而是在循环中使用了值来执行您尝试执行的操作。我有一个保存数据的变量,将变量传递给脚本任务,然后将上一个循环中的变量值连接到我从脚本任务中获得的值,然后将更新/连接的值返回给SSIS变量,然后在下一个循环中使用。我认为缓冲区将类似于您必须首先传递或读取缓冲区中的现有值。谢谢@Brad,我正在尝试,很好!谢谢!@比林克,我正在测试!