Ssis 将字符串值存储到对象中并在以后使用

Ssis 将字符串值存储到对象中并在以后使用,ssis,etl,script-task,Ssis,Etl,Script Task,我想将正在处理的文件名存储到变量中?然后稍后使用此变量(文件名)将这些文件移动到已处理的文件夹中。我正在使用foreach循环,其中数据流任务处理每个文件,并使用in循环将文件名存储到脚本任务中的对象中 string filename = Dts.Variables["User::FILE_NAME"].Value.ToString(); object proccessed_file_name; proccessed_file_name += filename; Dts.Variables["U

我想将正在处理的文件名存储到变量中?然后稍后使用此变量(文件名)将这些文件移动到已处理的文件夹中。我正在使用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;

请帮助我将字符串值存储到对象中,稍后在包中使用

无需脚本任务,只需1个变量
User::FILE\u NAME

在目录上使用
foreach循环
,从该任务填充
文件名
。通过数据流转换处理文件。然后移动文件。然后让您的
foreach循环继续。通过以增量方式移动文件,您将准确地知道哪些成功,哪些失败,并且能够重新启动流程,而无需回滚正确处理的文件并从头开始

如果你想等着移动所有东西,你可以做两步移动。1使用与上述相同的逻辑,只需将原始目录重命名为.processed或其他内容。然后,在该循环完成后,将另一个
foreach
过滤添加到已处理的文件中,然后使用相同的
FILE\u NAME
变量并移动文件

在这两种情况下都不需要
脚本任务

如果确实要使用
脚本任务
。将
脚本任务
放在
DFT
之后的
foreach循环中
。另一个变量是
对象
类型,它将保存
数据表
或其他内容。用文件名等填充该
DataTable
。然后在
foreach
之后,您将需要
另一个脚本任务
,该任务将加载该表并获取要处理的文件名。老实说,在最后一步中,最容易使用
system.io
并在脚本中移动文件

您将如何使用
datatable
之类的变量(我是自由编写的,因此可能需要额外的步骤和错误检查。)

要将文件名填充到
DataTable
,请使
File\u Name
变量可读,并使
DataTableVariableName
可读/写到脚本任务中,然后从以下内容开始:

实际上,您可能需要测试user
变量的null值。在这一行之前,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.
现在您有了
数据表
。在
foreach循环之后
添加
脚本任务
以移动处理过的文件

再次从从从变量检索表开始

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
或每个循环中移动文件,这样你就不需要脚本任务了。

你可以不用脚本任务,只需要一个变量
User::file\u NAME

在目录上使用
foreach循环
,从该任务填充
文件名
。通过数据流转换处理文件。然后移动文件。然后让您的
foreach循环继续。通过以增量方式移动文件,您将准确地知道哪些成功,哪些失败,并且能够重新启动流程,而无需回滚正确处理的文件并从头开始

如果你想等着移动所有东西,你可以做两步移动。1使用与上述相同的逻辑,只需将原始目录重命名为.processed或其他内容。然后,在该循环完成后,将另一个
foreach
过滤添加到已处理的文件中,然后使用相同的
FILE\u NAME
变量并移动文件

在这两种情况下都不需要
脚本任务

如果确实要使用
脚本任务
。将
脚本任务
放在
DFT
之后的
foreach循环中
。另一个变量是
对象
类型,它将保存
数据表
或其他内容。用文件名等填充该
DataTable
。然后在
foreach
之后,您将需要
另一个脚本任务
,该任务将加载该表并获取要处理的文件名。老实说,在最后一步中,最容易使用
system.io
并在脚本中移动文件

您将如何使用
datatable
之类的变量(我是自由编写的,因此可能需要额外的步骤和错误检查。)

要将文件名填充到
DataTable
,请使
File\u Name
变量可读,并使
DataTableVariableName
可读/写到脚本任务中,然后从以下内容开始:

实际上,您可能需要测试user
变量的null值。在这一行之前,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.
现在您有了
数据表
。在
foreach循环之后
添加
脚本任务
以移动处理过的文件

再次从从从变量检索表开始

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
或每个循环中移动文件,这样你就不需要脚本任务了