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

17

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

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

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

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

    XlsFile = varCollection["User::FilePath"].Value.ToString();
    
задан Ashfaq Ahmed 19.11.2012 в 09:49
источник

4 ответа

39

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

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

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

ответ дан user2519563 04.12.2013 в 15:52
источник
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
источник