Как получить доступ к переменным пакета ssis внутри компонента скрипта

21

Как я могу получить доступ к переменным внутри моего кода на C #, который я использовал в потоке данных - & gt; Компонент скрипта - & gt; Мой скрипт c # с моим пакетом SSIS?

Я пробовал, с которым тоже не работает

IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;

XlsFile = varCollection["User::FilePath"].Value.ToString();
    
задан Ashfaq Ahmed 19.11.2012 в 09:49
источник
  • Какова ошибка или неожиданное поведение, с которым вы сталкиваетесь? –  billinkc 19.11.2012 в 15:07

6 ответов

45

Доступ к переменным пакета в скрипте Компонент (задачи потока данных) - это не то же самое, что доступ к переменным пакета в скрипте Задача . Для компонента скрипта сначала необходимо открыть редактор трансформации сценария (щелкните правой кнопкой мыши на компоненте и выберите «Изменить ...»). В разделе «Пользовательские свойства» на вкладке «Сценарий» вы можете ввести (или выбрать) свойства, которые вы хотите сделать доступными для скрипта, либо по принципу «только для чтения», либо «читать-писать»: Затем в самом скрипте переменные будут доступны как сильно типизированные свойства объекта Variables:

// Modify as necessary
public override void PreExecute()
{
    base.PreExecute();
    string thePath = Variables.FilePath;
    // Do something ...
}

public override void PostExecute()
{
    base.PostExecute();
    string theNewValue = "";
    // Do something to figure out the new value...
    Variables.FilePath = theNewValue;
}

public override void Input0_ProcessInputRow(Input0Buffer Row)
{
    string thePath = Variables.FilePath;
    // Do whatever needs doing here ...
}

Одно важное предостережение: если вам нужно написать для переменной пакета, вы можете сделать это только в методе PostExecute ().

Что касается фрагмента кода:

IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;

XlsFile = varCollection["User::FilePath"].Value.ToString();

varCollection инициализируется нулем и никогда не устанавливается в допустимое значение. Таким образом, попытка любой разыменовать его не удастся.

    
ответ дан Edmund Schweppe 19.11.2012 в 18:51
источник
1
  • На странице свойств свойств скрипта переменной измените свойство ReadOnlyVariables (или ReadWriteVariables) и выберите интересующие вас переменные. Это позволит выбранным переменным в задаче сценария
  • Внутри кода у вас теперь будет доступ к чтению переменной как

    string myString = Variables.MyVariableName.ToString ();

ответ дан Daryl Wenman-Bateson 19.11.2012 в 12:12
источник
  • Правильно ли это? Кажется, у меня нет доступа к этим переменным –  Zach Smith 16.06.2017 в 04:11
0

Сильно типизированный var не представляется доступным, я должен сделать следующее, чтобы получить к ним доступ:

String MyVar = Dts.Variables["MyVarName"].Value.ToString();     

ответ дан user2519563 04.12.2013 в 15:52
источник
  • Этот ответ, похоже, относится к задаче сценария (в потоке управления), тогда как вопрос относится к компоненту скрипта (в потоке данных). –  Sepster 30.07.2015 в 05:57
0

Это должно работать:

IDTSVariables100 vars = null;
VariableDispenser.LockForRead("System::TaskName");
VariableDispenser.GetVariables(vars);
string TaskName = vars("System::TaskName").Value.ToString();
vars.Unlock();

В исходном коде отсутствует вызов метода GetVariables ().

    
ответ дан prot 29.11.2016 в 11:42
источник
0

У меня была та же проблема, что и у OP, за исключением того, что я вспомнил, что объявил ReadOnlyVariables.

После некоторых игр, я обнаружил, что это была проблема с моей переменной. «File_Path» в SSIS каким-то образом преобразован в «FilePath». C # не играет красиво с подчеркиваниями в именах переменных.

Итак, чтобы получить доступ к переменной, введите

string fp = Variables.FilePath;

В методе PreExecute () компонента Script.

    
ответ дан Marco Rosas 20.02.2018 в 23:43
источник
0

Сначала перечислите переменную, которую вы хотите использовать в задаче Script, в ReadOnlyVariables в редакторе задач скрипта и отредактируйте сценарий

Использовать ReadOnlyVariables в коде сценария

String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();

эта строка кода будет обрабатывать переменную пакета ssis в виде строки.

    
ответ дан Adithya Alapati 21.02.2018 в 12:23
источник