Подтвердить что ты не робот

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

Я новичок в SSIS, работая над проектом и пытаясь получить доступ к переменным пакета SSIS внутри моего кода С#, который я использовал в Поток данных → Script Компонент → Мой С# Script

может кто-нибудь помочь в этом?

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

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

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

Ответ 1

Доступ к переменным пакета в Script Компонент (задачи потока данных) - это не то же самое, что доступ к переменным пакета в Script Задача. Для компонента Script вам сначала нужно открыть Script Редактор преобразования (щелкните правой кнопкой мыши на компоненте и выберите "Изменить". ".). В разделе" Пользовательские свойства "вкладки Script вы можете ввести (или выбрать) свойства, которые вы хотите сделать доступными для script, либо по принципу" только для чтения", либо для чтения-записи: screenshot of Script Transformation Editor properties page Затем в самом Script переменные будут доступны как строго типизированные свойства объекта 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 инициализируется нулем и никогда не устанавливается в допустимое значение. Таким образом, попытка любой разыменовать его не удастся.

Ответ 2

  • На странице свойств свойств переменной script измените свойство ReadOnlyVariables (или ReadWriteVariables) и выберите интересующие вас переменные. Это позволит выбрать выбранные переменные в script task
  • Внутри кода у вас теперь будет доступ к чтению переменной как

    string myString = Variables.MyVariableName.ToString();

Ответ 3

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

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

Ответ 4

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

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

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