我想将正在处理的文件名存储到变量中?然后使用此变量(文件名)将这些文件移动到proccessed文件夹中。我正在使用foreach循环,其中数据流任务处理每个文件并使用in循环将文件名存储到脚本任务中的对象中。
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;
请帮我将字符串值存储到对象中,然后在包中使用。
答案 0 :(得分: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
可读/写脚本任务,然后从以下内容开始:
你可能实际上必须在此行之前测试用户variable.value
的null我不是肯定的。
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);
}
}
}
我认为你会更乐意在f oreach loop
中移动文件,这样你就不需要脚本任务了。