2016-06-19 5 views
1

Я хотел бы сохранить имена файлов, которые обрабатываются в переменную? а затем позже использовать эту переменную (имена файлов), чтобы переместить эти файлы в перегруженную папку. Я использую foreach loop, где задача потока данных обрабатывает каждый файл и сохраняет имена файлов в объекте в задаче скрипта с помощью цикла.хранить значения строк в объекте и использовать позже

string filename = Dts.Variables["User::FILE_NAME"].Value.ToString(); 
object proccessed_file_name; 
proccessed_file_name += filename; 
Dts.Variables["User::FILE_NAME"].Value = proccessed_file_name; 

Pls поможет мне сохранить значения строк в объекте и использовать позже в пакете.

ответ

0

Вы можете сделать это без задания сценария и только 1 переменная User::FILE_NAME.

Используйте foreach loop в каталоге, заполните FILE_NAME из этой задачи. Обработайте файл с помощью преобразования данных. Затем переместите файл. Затем просто пропустите ваш foreach loop. Постепенно перемещая файлы, вы точно узнаете, что преуспело, а что не удалось, и сможете перезапустить ваш процесс, не откатываясь от файлов, которые были обработаны правильно и с нуля.

Если вы хотите подождать, чтобы переместить все, вы можете сделать двухэтапный ход. 1 в той же логике, что и выше, которая просто переименовывается в .processed или что-то в исходный каталог. Затем после завершения цикла добавьте еще одну фильтрацию foreach в обработанные файлы, затем используйте ту же переменную FILE_NAME и переместите ваши файлы.

Нет необходимости в script task в любой ситуации.

Если вы действительно хотите использовать script task. Поместите script task после DFT в foreach loop. Иметь другую переменную, которая является object, которая будет содержать datatable или что-то в этом роде. Заполните это DataTable с именем файла и т. Д. Затем после вашего foreach вам понадобится another script task, который загрузит таблицу и получит имя файла, который вы хотите обработать. Честно говоря, на этом последнем этапе проще всего использовать system.io и перемещать файлы внутри скрипта.

Как бы вы использовать переменную, которая является datatable что-то вроде (и я это пишу свободно, так это, вероятно, потребуются дополнительные шаги и проверки ошибок.)

Для занесения имен файлов в DataTable, сделать File_Name переменной читаемым , и DataTableVariableName читать/записывать в задачу сценария, а затем начинать с чего-то вроде:

вы, возможно, на самом деле вам нужно проверить для null пользователя variable.value перед этой строкой. Я не уверен.

system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value; 

if (dt == null) 
{ 
    Write code to create your datatable 
} 
Add new DataRow to table -- lots of results on web about this and creating datatable. 

Теперь у вас есть datatable. После foreach loop добавьте script task, чтобы переместить обработанные файлы.

Снова начать с получения таблицы из переменной

system.data.datatable dt = (system.data.datatable)Dts.Variables["User::DataTableVariableName"].Value; 

затем петли через datatable, и я хотел бы предложить перенести файлы здесь.

foreach (dt datarow in dt.rows) 
{ 
    typically I like to suggest copying and then deleting the source file depending on how you over write. so you would do something like. 
If (system.io.file.Exists(dr.["FileNameRowLable"].ToString()) 
{ 
    system.io.file.copy(source, destination); 
    if (file.exists(destination)) 
    { 
     file.delete(source); 
    } 
} 
} 

Я думаю, что вы будете счастливее прилипание с движущимися файл в е oreach loop так вам не нужно задача сценария.

 Смежные вопросы

  • Нет связанных вопросов^_^