2012-06-11 5 views
2

Мой текущий пакет состоит из источника Excel, компонента Script и назначения 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.AddRow() перед оператором outbuffer.labortypewbs = ......... – praveen

ответ

3

Почему вы не используете производный столбец, а не компонент скрипта. Вы можете добавить столбец, который является подстрокой существующего столбца тривиально с этим компонентом, и вам не нужно писать какой-либо код или изучать тонкости программирования компонентов скриптов. Я бы использовал только скриптовый компонент, если:

  1. У меня был случай, когда не было существующего компонента для преобразования, которое я хотел.
  2. Компонент, который мне нужно использовать, был недостаточно быстрым или достаточно точным (с доказательством) для использования.

У меня было несколько случаев, когда компонент сценария был лучшим решением, но они немногочисленны и находятся далеко друг от друга, а подстрока не является одним из этих случаев.

1

Хотя вы можете использовать производный столбец для достижения этого, как указал Уильям, стоит упомянуть о решении реальной проблемы.

Прежде чем вы сможете установить значения ваших выходных столбцов, вам сначала нужно добавить новую строку. Ваш код должен быть:

public override void Input0_ProcessInputRow(Input0Buffer Row) 
{ 
    OutBuffer.AddRow(); 
    OutBuffer.labortypewbs = Row.CopyofLevel2ProjectSegment.Substring(Row.CopyofLevel2ProjectSegment.Length - 2, 2); 
} 
Смежные вопросы