用于选择要在Excel连接管理器中使用的变量文件的脚本

时间:2013-06-24 10:44:44

标签: ssis

我需要你的帮助。我有一个SSIS包,从文件夹中选择文件并将其加载到SQL表中。我遇到的问题是文件名有一个日期时间戳,所以每次加载开始时,这个文件名都会改变。

你能否建议如何处理这个问题,如果可能的话,提供一个示例脚本,因为我没有任何VB.NET经验

由于

2 个答案:

答案 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;
}
  • 找到文件并刷新File变量后,您可以使用表达式填充Excel源代码的 ExcelFilePath 属性。

N.B!请务必选择 ExcelFilePath ,而不是 ConnectionString 属性。