Установить путь к файлу из базы данных в переменной SSIS для ведения журнала

У меня есть несколько путей в моей таблице базы данных, как это:

ID          PATHXML              PATHPICT               PATHSONG
1         D:\XML\Here        D:\Picture\Image      D:\Blur\Song2
2         D:\XML\File        D:\Picture\X-Files    D:\IRONMAIDEN\Fearofthedark

Я хочу включить регистрацию в SSIS и сохранить этот результат в PathSong, например. D:\ Размытие \Song2\eventlog.log

Я создал переменную, чтобы получить этот путь. Но когда я создаю выражение, используя эту переменную, оно не работает. Так что я могу сделать, чтобы это исправить?

1 ответ

Решение

Доступ к переменным пакета в компоненте сценария (задачи потока данных) - это не то же самое, что доступ к переменным пакета в задаче сценария. Для компонента "Сценарий" сначала необходимо открыть редактор преобразования сценариев (щелкните правой кнопкой мыши компонент и выберите "Изменить..."). В разделе "Пользовательские свойства" на вкладке "Сценарий" вы можете ввести (или выбрать) свойства, которые вы хотите сделать доступными для сценария, только для чтения или для чтения-записи:

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

Другие вопросы по тегам