2

我当前的包包含一个 Excel 源、一个脚本组件和一个 OLE DB 目标。我想要完成的只是改造我的一个专栏。对于这个特定的列,我想要该列的子字符串。但是,我不断收到以下错误消息:

 There is no current row in the buffer. A row may need to be added using the AddRow method.
 at Microsoft.SqlServer.Dts.Pipeline.ScriptComponentHost.HandleUserException(Exception e)

这意味着什么?当我所做的只是转换数据时,为什么我需要添加行?我错过了关于 SSIS 的大局吗?

这是我在脚本中的代码:

    public override void Input0_ProcessInputRow(Input0Buffer Row)
    {
        OutBuffer.labortypewbs = Row.CopyofLevel2ProjectSegment.Substring(Row.CopyofLevel2ProjectSegment.Length - 2, 2);
    }

感谢所有的帮助!

4

2 回答 2

3

为什么不使用派生列而不是脚本组件。您可以使用该组件添加一个作为现有列的子字符串的列,而无需编写任何代码或学习脚本组件编程的复杂性。我只会在以下情况下使用脚本组件:

  1. 我有一个案例,没有现有的组件可以进行我想要的转换。
  2. 我需要使用的组件不够快或不够准确(有证据)无法使用。

我遇到过一些极端情况,其中脚本组件是最好的解决方案,但它们很少见,而且子字符串不是这些情况之一。

于 2012-06-11T17:51:49.827 回答
3

虽然您可以使用派生列来完成此操作,正如 William 所指出的,但值得一提的是针对实际遇到的问题的解决方案。

在设置输出列的值之前,您首先必须添加一个新行。您的代码应该是:

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    OutBuffer.AddRow();
    OutBuffer.labortypewbs = Row.CopyofLevel2ProjectSegment.Substring(Row.CopyofLevel2ProjectSegment.Length - 2, 2);
}
于 2016-06-30T16:56:50.360 回答