emd*_*emd 1 ienumerator ssis file
我对SSIS有一个有趣的挑战.使用for-each文件枚举器,我需要选择最近创建的子文件夹,然后遍历每个文件.
也许一个例子可以更好地解释.文件夹看起来像这样:
C:\数据\ 2011-0703
C:\数据\ 2011-0626
C:\数据\ 2011-0619
你怎么能得到每个文件枚举器来选择最新的文件夹?这可以通过查看创建日期或比较文件名来实现.
我猜它会在枚举器中用表达式完成,只是无法弄清楚如何!也无法在网上找到任何东西.
谢谢
小智 5
这是一个可能的选项,你可以借助于实现这一目标Script Task.以下示例显示了如何完成此操作.该示例是在SSIS 2008 R2中创建的.
分步过程:
创建三个名为的文件夹2011-0619,2011-0626并2011-0703在文件夹路径C:\temp\中显示,如屏幕截图#1所示.记下Date created每个文件夹的值.
在每个文件夹中放置几个文件,如屏幕截图#2 - #4所示.
在SSIS包上,创建四个变量,如屏幕截图#5所示.使用值设置变量RootFolderC:\temp\(在您的情况下,这将是c:\ data).使用值设置变量FilePattern*.*.将在"脚本任务"中为变量RecentFolder分配最近的文件夹路径.要避免设计时错误,请为变量RecentFolder指定有效的文件路径.当文件在最近的文件夹中循环时,将为变量FilePath分配值.
在SSIS包上,放置一个脚本任务.使用脚本任务代码在脚本任务代码(获取最近文件夹)部分下替换脚本任务中的Main()方法:.此脚本获取根文件夹中的文件夹列表,并循环检查创建日期时间以选择最近创建的文件夹.然后,最近创建的文件夹路径存储在变量RecentFolder中.
在SSIS包上,放置一个Foreach循环容器并按照屏幕截图#6和#7中的配置进行配置.
将脚本任务放在Foreach循环容器中.使用脚本任务代码在脚本任务代码(显示文件名)部分下替换脚本任务中的Main()方法:.此脚本只显示最近创建的文件夹中的文件名.
配置完所有任务后,程序包应如屏幕截图#8所示.
屏幕截图#9 - #11显示该包显示最近创建的文件夹2011-0703中的文件名.
希望有所帮助.
脚本任务代码(获取最近的文件夹):
只能在SSIS 2008及更高版本中使用的C#代码.
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::RootFolder");
Dts.VariableDispenser.LockForWrite("User::RecentFolder");
Dts.VariableDispenser.GetVariables(ref varCollection);
string rootFolder = varCollection["User::RootFolder"].Value.ToString();
DateTime previousFolderTime = DateTime.MinValue;
string recentFolder = string.Empty;
foreach (string subFolder in System.IO.Directory.GetDirectories(rootFolder))
{
DateTime currentFolderTime = System.IO.Directory.GetCreationTime(subFolder);
if (previousFolderTime == DateTime.MinValue || previousFolderTime <= currentFolderTime)
{
previousFolderTime = currentFolderTime;
recentFolder = subFolder;
}
}
varCollection["User::RecentFolder"].Value = recentFolder;
Dts.TaskResult = (int)ScriptResults.Success;
}
Run Code Online (Sandbox Code Playgroud)
脚本任务代码(显示文件名):
只能在SSIS 2008及更高版本中使用的C#代码.
public void Main()
{
Variables varCollection = null;
Dts.VariableDispenser.LockForRead("User::FilePath");
Dts.VariableDispenser.GetVariables(ref varCollection);
MessageBox.Show(varCollection["User::FilePath"].Value.ToString(), "File Path");
Dts.TaskResult = (int)ScriptResults.Success;
}
Run Code Online (Sandbox Code Playgroud)
截图#1:

截图#2:

截图#3:

截图#4:

截图#5:

截图#6:

截图#7:

截图#8:

截图#9:

截图#10:

截图#11:
