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

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

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

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

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

6 ответов


доступ к переменным пакета в скрипте компонент (задачи потока данных) - это не то же самое, что доступ к переменным пакета в скрипте задание. Для компонента скрипта сначала необходимо открыть Редактор Преобразования "Скрипт" (правой кнопкой мыши на компоненте и выберите "Изменить..."). В разделе настраиваемые свойства вкладки сценарий можно ввести (или выбрать) свойства, которые вы хотите сделать доступными для сценария, только для чтения или записи основа: screenshot of Script Transformation Editor properties page Затем в самом скрипте переменные будут доступны как строго типизированные свойства объекта переменных:

// 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 инициализируется как null и никогда не устанавливается в допустимое значение. Таким образом, любой попытка разыменования будет неудача.


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

    string myString = переменные.MyVariableName.ToString ();


сначала перечислите переменную, которую вы хотите использовать в задаче скрипта в readonlyvariables в Редакторе задач скрипта и отредактируйте скрипт

использовать ReadOnlyVariables в коде скрипта

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

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


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

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


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

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

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


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

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

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

string fp = Variables.FilePath;

в методе PreExecute () компонента скрипта.