我需要你的帮助。我有一个SSIS包,从文件夹中选择文件并将其加载到SQL表中。我遇到的问题是文件名有一个日期时间戳,所以每次加载开始时,这个文件名都会改变。
你能否建议如何处理这个问题,如果可能的话,提供一个示例脚本,因为我没有任何VB.NET经验
由于
答案 0 :(得分:0)
使用Foreach Loop Container
。更改Foreach循环容器集合以使用Foreach File Enumerator
,这应该是默认选项。将枚举器的文件夹指向包含文件的文件夹。
如果新文件插入到文件夹中,则应删除它们或将处理的文件移动到子文件夹,这样它们就不会被处理两次。您可以使用File System Task
。
答案 1 :(得分:0)
例如,如果您只检索指定目录中的最新文件。在数据流任务之前,可以使用脚本任务作为控制流中的第一个元素来完成。
你能做的是:
创建一个将FilePath字符串传递给的变量。这最初将包含目录路径,并且在脚本任务检索到最新文件的正确文件名后,它将更新为在Excel源中使用。
您控制流程中的第一个元素将是您的脚本任务。 此脚本任务将包含以下代码,该代码查找目录中查找特定模式的最新文件。 您需要导入System.IO库:
public void Main()
{
// Specify a pattern to look for specific files.
string pattern = "YOURFILE*.txt";
string directoryPath = this.Dts.Variables["User::FileName"].Value.ToString();
string file = GetFile(directoryPath, pattern);
this.Dts.Variables["User::FileName"].Value = file;
}
private static string GetFile(string directory, string pattern)
{
DirectoryInfo theDirectory = new DirectoryInfo(directory);
FileInfo theLatestFile = GetLatestFile(theDirectory, pattern);
return theLatestFile.ToString();
}
// Retrieve latest file in specific directory following a given pattern.
private static FileInfo GetLatestFile(DirectoryInfo directoryInfo, string pattern)
{
if (directoryInfo == null || !directoryInfo.Exists)
return null;
FileInfo[] files = directoryInfo.GetFiles(pattern);
DateTime lastWrite = DateTime.MinValue;
FileInfo lastWritenFile = null;
foreach (FileInfo file in files)
{
if (file.LastWriteTime > lastWrite)
{
lastWrite = file.LastWriteTime;
lastWritenFile = file;
}
}
return lastWritenFile;
}
N.B!请务必选择 ExcelFilePath ,而不是 ConnectionString 属性。