一个包中的SSIS多个脚本组件似乎正在使用相同的脚本缓冲区

时间:2018-07-14 08:42:14

标签: c# ssis

我是SSIS脚本组件的新手,如果我的问题标题没有多大意义,请道歉。

我的任务是从18个CSV文件中获取数据(列/记录),对数据库表进行查找,然后将记录写入字符串(将是Oracle Insert语句),并将每个字符串写入.txt文件。

我有一个软件包,其中包括一个脚本,该脚本用于创建/清除.txt文件中的数据,然后包含18个数据流任务,这些任务将在脚本任务完成后运行。在每个数据流任务中都有一个平面文件源,一个查找和一个脚本组件。

每个脚本组件代码基本上都是相同的,只是文件名和列的更改被传入:

public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        string path = @"c:\temp\001_ADVICE.txt";
        string insertstatement = ("Insert into MAT.ADVICE VALUES ("
            + Row.MASEQNO + "," + Row.MACREATEDATE + ",'" + Row.MACREATEBY + "','" + Row.MAMACCASEID + "'," + Row.MAVERSION + ",'" + Row.MAJUSTREPAYMETHOD + "','" 
            + Row.MAJUSTTERM + "','" + Row.MAJUSTSCHTYPE + "','" + Row.MAJUSTSCHDURATION + "','" + Row.MAJUSTERC + "','" + Row.MAJUSTFEES + "','" + Row.MAJUSTOTHFEATURES 
            + "','" + Row.MAJUSTOTHNOTES + "'," + Row.MACHANGEDATE + ",'" + Row.MACHANGEBY + "'," + Row.MASUITLETTERPRINTED + ",'" + Row.MAREVIEWUSER 
            + "'," + Row.MAREVIEWDATE + ",'" + Row.MAREVIEWFLAG + "','" + Row.MAREVIEWRESULT + "','" + Row.MAREVIEWNOTE + "','" + Row.MAREVIEWCONF
            + "','" + Row.MASPELLREVIEWUSER + "'," + Row.MASPELLREVIEWDATE + ",'" + Row.MASPELLREVIEWRESULT + "','" + Row.MASPELLREVIEWNOTE
            + "','" + Row.MASPELLREVIEWCONF + "','" + Row.MAJUSTUSER + "," + Row.MAREJDATE + ",'" + Row.MAVALISSUE + "','" + Row.MAADVICESTATUS + "');" + Environment.NewLine);

        File.AppendAllText(path, insertstatement);
    }

单独地,它们都可以正常运行,但是,如果我尝试并行运行它们,则其中的一个可以正确完成,而其他的似乎可以完成但不写入各自的文件,另外两个将因错误而失败在下面-或以串行方式运行,第一个运行正常,而下一个失败并显示

Index was outside the bounds of the array:

    at ScriptMain.Input0_ProcessInputRow(Input0Buffer Row)
       at UserComponent.Input0_ProcessInput(Input0Buffer Buffer)
       at UserComponent.ProcessInput(Int32 InputID, String InputName, PipelineBuffer Buffer, OutputNameMap OutputMap)
       at Microsoft.SqlServer.Dts.Pipeline.ScriptComponent.ProcessInput(Int32 InputID, PipelineBuffer buffer)
       at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.ProcessInput(Int32 inputID, PipelineBuffer buffer)

我认为问题可能与缓冲区仍然包含先前脚本组件数据或沿这些行的内容有关。

我已经花了数小时寻找解决方案,所以任何建议都很好

0 个答案:

没有答案