2012-06-11 29 views
2

我的当前包由一个Excel源,一个脚本组件和一个OLE DB目的地组成。我想要完成的一切就是改变我的一个专栏。对于这个特定的列,我想要一个列的子字符串。但是,我不断收到以下错误消息:SQL Server SSIS没有当前行

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); 
    } 

感谢所有帮助!

+0

你可以发布你写在脚本部分的代码 – praveen

+0

@praveen我很乐意。 – CodeKingPlusPlus

+1

您需要在将值分配给输出列之前添加该行。在语句outbuffer.labortypewbs = ......... – praveen

回答

3

为什么不使用派生列而不是脚本组件。您可以使用该组件轻松地添加一列作为现有列的子字符串,并且不必编写任何代码或了解脚本组件编程的复杂性。我只会在以下情况下使用脚本组件:

  1. 我有一个情况,没有现有的组件来执行我想要的转换。
  2. 我需要使用的组件不够快或不够准确(有证据)使用。

我有几个边缘的情况下脚本组件是最好的解决方案,但它们很少,而且子字符串不是这些情况之一。

1

虽然您可以使用派生列来完成此任务,但William已指出,值得一提的是解决实际遇到的问题的方法。

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

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