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

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

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;

Пожалуйста, помогите мне сохранить строковые значения в объекте и использовать их позже в пакете.


person user2841795    schedule 19.06.2016    source источник


Ответы (1)


Вы можете сделать это без задачи скрипта и только с 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);
   }
}
}

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

person Matt    schedule 19.06.2016