1

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

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

谢谢

4

2 回答 2

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

注意!确保选择ExcelFilePath,而不是ConnectionString属性。

于 2013-06-24T17:45:10.747 回答
0

使用Foreach Loop Container. 将 Foreach 循环容器集合更改为使用Foreach File Enumerator,这应该是默认选项。将枚举器的文件夹指向包含您的文件的文件夹。

如果新文件被插入到文件夹中,那么您应该删除它们或将处理过的文件移动到子文件夹中,这样它们就不会被处理两次。您可以使用File System Task.

于 2013-06-24T11:25:12.953 回答