Как изменить значение переменной SSIS в пакете с помощью компонента сценария в потоке данных

введите здесь описание изображенияЯ загружаю json-файл и успешно помещаю его в таблицу, используя поток данных и объект компонента скрипта.

В моем файле json есть количество строк чисел, которые я должен импортировать, и сколько страниц потребуется для импорта данных.

например количество: 1925, текущая страница: 1, всего страниц: 2, результаты:

Я на своем URL-адресе, чтобы получить файл json, я должен указать, какую страницу я пытаюсь получить. например &страница= + номер страницы

Я хотел бы автоматизировать свой пакет SSIS, чтобы сделать это. Мне удалось назначить пользовательские переменные, чтобы импортировать количество строк, количество строк для импорта с помощью функции чтения и записи в компоненте скрипта, назначив в области «Пост-выполнение».

Я хотел бы использовать контейнер For Loop для зацикливания потока данных и продолжать импортировать данные до тех пор, пока количество импортированных строк не сравняется с количеством импортируемых строк.

Мои проблемы в том, что когда я выполняю поток управления, я продолжаю получать сообщение об ошибке

Набор переменных, заблокированных для чтения и записи, недоступен вне PostExecute.

Как мне изменить переменные, чтобы я мог использовать их в контейнере for Loop?

Добавлен код по просьбе Брэда.

public override void PostExecute()
{
    base.PostExecute();
   
    Variables.RowsImported = i;
    Variables.RowsTobeImported = totalcount;

    if (totalcount > i)
        Variables.PageNoExtra = Variables.PageNoExtra + 1;

    MessageBox.Show(Variables.RowsImported.ToString());
    MessageBox.Show(Variables.RowsTobeImported.ToString());
    //MessageBox.Show(Variables.PageNoExtra.ToString());
}

person user11034054    schedule 20.01.2021    source источник
comment
Как вы получаете доступ к переменным в своей задаче сценария? Я получил к ним доступ несколькими разными способами (укажите их в окне редактора задач сценария как только для чтения или для чтения/записи), или вы можете получить к ним доступ напрямую из кода С#, не делая этого (хотя на данный момент я не могу найти код, как я это сделал это), но если вы сообщите, как вы это делаете, мы сможем помочь лучше.   -  person Brad    schedule 20.01.2021
comment
Я использую компонент сценария в задаче потока данных для назначения переменной, но они теряются после того, как поток данных завершает передачу данных в таблицу SQL.   -  person user11034054    schedule 20.01.2021


Ответы (1)


Похоже, ваша проблема связана с доступом к переменным в PostExecute, переместите его за пределы PostExecute. Я получаю доступ к переменным из задач сценария, как в приведенных ниже примерах кода. Раньше у меня была проблема с доступом к нему по-другому, но я не могу вспомнить проблему, но я знаю, что это решило ее, и именно так я делаю это все время.

Чтобы сделать это таким образом, вы должны установить переменные чтения/записи в диспетчере свойств задачи сценария, как на снимке экрана, чтобы сделать их доступными таким образом.

Также другая проблема может заключаться в том, что вы пытаетесь что-то сделать с переменными в PostExecute, поскольку это не делается до завершения выполнения, это может вызвать проблемы (не уверен, но я никогда не выполнял какую-либо работу с переменными в PostExecute).

// Read variable from SSIS package in C# script task
string VariableUseInScript = Dts.Variables["User::VariableAccessedFromSSISPackage"].Value.ToString();


// SET variable value in SSIS package to use in other parts of package
Dts.Variables("[SSISVariableValueToSet]").Value = "ValueToSet";

введите здесь описание изображения

ПРИМЕЧАНИЕ. На приведенном выше снимке экрана у меня есть только 1 переменная в каждом. У вас может быть несколько в каждом, или все они могут быть в режиме «Только для чтения» (если вы их не обновляете) или в режиме «Чтение-запись», если вы их обновляете.

person Brad    schedule 20.01.2021
comment
Сначала я искал, как решить эту проблему, прежде чем публиковать здесь, в основном они говорят, что выполнение поста - лучшее место для изменения переменных чтения и записи, и я проверяю через окно сообщения, изменяются ли они, и они делают именно то, что хотят. . однако мне нужно использовать или передать измененное значение переменной в цикл for, чтобы цикл for мог использовать значение, чтобы определить, сколько раз ему нужно запустить поток данных. Я надеюсь, что в этом есть смысл. - person user11034054; 20.01.2021
comment
когда я запускаю все это как есть, оно выдает мне это сообщение об ошибке. Коллекция переменных, заблокированных для доступа для чтения и записи, недоступна за пределами PostExecute. и я не знаю, что еще делать. поэтому, пожалуйста, помогите. - person user11034054; 20.01.2021
comment
Я постоянно обновляю переменные в SSIS и не использую PostExecute. Попробуйте поместить их в функцию основного кода (не после выполнения), чтобы увидеть, исправит ли это это. - person Brad; 20.01.2021
comment
Я попытался удалить Post Execute и свой обычный код. Но я все еще получаю ту же ошибку. - person user11034054; 21.01.2021