Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 SSIS удалить только что добавленную строку в CreateNewOutputRows  [new]
Virtuoz
Member

Откуда: Украина
Сообщений: 307
Всем привет.

В Script Transformation Editor-е есть код, который добавляет новую строку:

  try
            {
                // Add a row
                MyOutputBuffer.AddRow();
            .....

            }


как в блоке catch удалить эту добавленную строку, в случае, если в блоке try словили exception, после того как строка добавлена?
11 дек 13, 12:18    [15276140]     Ответить | Цитировать Сообщить модератору
 Re: SSIS удалить только что добавленную строку в CreateNewOutputRows  [new]
Virtuoz
Member

Откуда: Украина
Сообщений: 307
Решил проблему обходным путём (добавил доп. поле в кастомном риде и по нему определяю добавлять ли Row вообще)

Но всё же хотелось бы услышать (и конечно же увидеть) более "лаконичное" что ли, решение.
12 дек 13, 14:47    [15282847]     Ответить | Цитировать Сообщить модератору
 Re: SSIS удалить только что добавленную строку в CreateNewOutputRows  [new]
RemoveRow
Guest
Virtuoz
Решил проблему обходным путём (добавил доп. поле в кастомном риде и по нему определяю добавлять ли Row вообще)

Но всё же хотелось бы услышать (и конечно же увидеть) более "лаконичное" что ли, решение.

чисто теоретически

все классы OutputXBuffer унаследованы от ScriptBuffer, у которого есть protected field Buffer
, которое имеет тип PipelineBuffer
а вот у этого класса есть метод RemoveRow.

проблемы две
1. protected, поля Buffer.
2. то, что код output класса автогенериться


насколько я понял, автогенерация класса Output0Buffer происходит при открытии скрипта на редактирования,
т.е. если добавлять каждый раз при открытии скрипта(!!!) в класс Output0Buffer метод
    public void RemoveRow()
    {
        Buffer.RemoveRow();
    }

его можно использовать в коде.

на простом примере непосредственно в VS у меня отрабатывает как надо.

    public override void CreateNewOutputRows()
    {
        Output0Buffer.AddRow();
        Output0Buffer.a = 1;
        Output0Buffer.AddRow();
        Output0Buffer.a = 2;
        Output0Buffer.RemoveRow();
        Output0Buffer.AddRow();
        Output0Buffer.a = 3;
    }

на выходе две строки.
12 дек 13, 16:15    [15283548]     Ответить | Цитировать Сообщить модератору
 Re: SSIS удалить только что добавленную строку в CreateNewOutputRows  [new]
Virtuoz
Member

Откуда: Украина
Сообщений: 307
Да, действительно.

Интересно на основании чего генерится класс BufferWrapper.cs. Наверняка есть какой то "скелет" (шаблон или XML).
И непонятно почему убрали метод RemoveRow предка... :(
12 дек 13, 16:51    [15283735]     Ответить | Цитировать Сообщить модератору
 Re: SSIS удалить только что добавленную строку в CreateNewOutputRows  [new]
RemoveRow
Guest
Virtuoz
И непонятно почему убрали метод RemoveRow предка... :(

Его не убрали, его не добавили.
12 дек 13, 17:36    [15284028]     Ответить | Цитировать Сообщить модератору
 Re: SSIS удалить только что добавленную строку в CreateNewOutputRows  [new]
RemoveRow
Guest
Virtuoz
Да, действительно.

Интересно на основании чего генерится класс BufferWrapper.cs. Наверняка есть какой то "скелет" (шаблон или XML).
И непонятно почему убрали метод RemoveRow предка... :(


кстати, до этого метода можно добрать через рефлекшн

    
    public void RemoveRow(ScriptBuffer scriptBuffer)
    {
        BindingFlags bindFlags = BindingFlags.Instance | BindingFlags.NonPublic;
        FieldInfo field = scriptBuffer.GetType().GetField("Buffer", bindFlags);
        ((PipelineBuffer)field.GetValue(scriptBuffer)).RemoveRow();

    }

    public override void CreateNewOutputRows()
    {
        Output0Buffer.AddRow();
        Output0Buffer.a = 1;
        Output0Buffer.AddRow();
        Output0Buffer.a = 2;
        RemoveRow(Output0Buffer);
        Output0Buffer.AddRow();
        Output0Buffer.a = 3;
    }
13 дек 13, 12:21    [15287503]     Ответить | Цитировать Сообщить модератору
 Re: SSIS удалить только что добавленную строку в CreateNewOutputRows  [new]
Virtuoz
Member

Откуда: Украина
Сообщений: 307
автор
кстати, до этого метода можно добрать через рефлекшн


Супер, спасибо. Сейчас попробую.
13 дек 13, 13:06    [15287877]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить