Как получить доступ к переменным пакета ssis внутри компонента скрипта
Как я могу получить доступ к переменным внутри моего кода C#, который я использовал в Потоке данных -> Компонент сценария -> Мой сценарий C# с моим пакетом служб SSIS?
Я пытался с которой тоже не работает
IDTSVariables100 varCollection = null;
this.VariableDispenser.LockForRead("User::FilePath");
string XlsFile;
XlsFile = varCollection["User::FilePath"].Value.ToString();
6 ответов
Доступ к переменным пакета в компоненте сценария (задачи потока данных) - это не то же самое, что доступ к переменным пакета в задаче сценария. Для компонента "Сценарий" сначала необходимо открыть редактор преобразования сценариев (щелкните правой кнопкой мыши компонент и выберите "Изменить..."). В разделе "Пользовательские свойства" на вкладке "Сценарий" вы можете ввести (или выбрать) свойства, которые вы хотите сделать доступными для сценария, только для чтения или для чтения-записи:Затем в самом скрипте переменные будут доступны в виде строго типизированных свойств объекта 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
инициализируется нулем и никогда не устанавливается на допустимое значение. Таким образом, любая попытка разыменования не удастся.
Сначала перечислите переменную, которую вы хотите использовать в задаче Script, в ReadOnlyVariables в редакторе задач Script и отредактируйте скрипт
Чтобы использовать ваши ReadOnlyVariables в коде скрипта
String codeVariable = Dts.Variables["User::VariableNameinSSIS"].Value.ToString();
эта строка кода будет обрабатывать переменную пакета ssis как строку.
У меня была та же проблема, что и у OP, за исключением того, что я запомнил объявление переменных ReadOnlyVariables.
После некоторой игры я обнаружил, что проблема заключалась в имени моей переменной. "File_Path" в SSIS каким-то образом преобразован в "FilePath". C# не очень хорошо сочетается с подчеркиванием в именах переменных.
Таким образом, чтобы получить доступ к переменной, я набираю
string fp = Variables.FilePath;
В методе PreExecute() компонента Script.
- На лицевой странице свойств сценария переменных измените свойство ReadOnlyVariables (или ReadWriteVariables) и выберите интересующие вас переменные. Это позволит включить выбранные переменные в задаче сценария.
В коде у вас теперь будет доступ для чтения переменной как
string myString = Variables.MyVariableName.ToString();
Это должно работать:
IDTSVariables100 vars = null;
VariableDispenser.LockForRead("System::TaskName");
VariableDispenser.GetVariables(vars);
string TaskName = vars("System::TaskName").Value.ToString();
vars.Unlock();
В вашем исходном коде отсутствует вызов метода GetVariables().
Строго типизированного var, кажется, не доступны, я должен сделать следующее, чтобы получить к ним доступ:
String MyVar = Dts.Variables["MyVarName"].Value.ToString();