Как получить доступ к переменным пакета служб ssis внутри компонента скрипта
Как я могу получить доступ к переменным внутри моего кода C#, который я использовал в потоке данных - > компонент скрипта - > мой скрипт c# с моим пакетом служб SSIS?
Я пробовал, с которым также не работает
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
6 ответов
доступ к переменным пакета в скрипте компонент (задачи потока данных) - это не то же самое, что доступ к переменным пакета в скрипте задание. Для компонента скрипта сначала необходимо открыть Редактор Преобразования "Скрипт" (правой кнопкой мыши на компоненте и выберите "Изменить..."). В разделе настраиваемые свойства вкладки сценарий можно ввести (или выбрать) свойства, которые вы хотите сделать доступными для сценария, только для чтения или записи основа: Затем в самом скрипте переменные будут доступны как строго типизированные свойства объекта переменных:
// 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 () компонента скрипта.