繁体   English   中英

SSIS-使用脚本任务分配变量后,文件系统任务找不到文件路径

[英]SSIS - File System task cannot find file path after using script task to assign variable

在我当前的项目中,我必须获取一个已知目录但名称未知的excel文件,将其放入数据库表中,然后移动并重命名所使用的excel文件。

因为这是我的第一个项目,所以我已经使用了一些教程和stackoverflow页面,因此为什么每个循环的控制流都位于a中(即使可能不需要),但这里是控制流:

http://i.stack.imgur.com/Nepgg.png

这是我的脚本任务,用于查找excel文件并分配变量:

  public void Main()
  {
        string directoryLocation = @"I:\All\L3VA Import\"; //Change this for new directory
        int directoryLength = directoryLocation.Length;

        string[] filePath = Directory.GetFiles(directoryLocation, "*.xls*");

        int filePathLength = filePath[0].Length;

        Dts.Variables["myConnectionString"].Value = filePath[0];
        Dts.Variables["myFileName"].Value = filePath[0].Substring(directoryLength, filePathLength - directoryLength);

然后,我使用“数据流”任务将电子表格数据泵入OLE DB,OLE DB不能单独工作,但是如果首先执行脚本任务就可以工作,这使我相信它可以正确分配变量。

当我然后尝试使用“文件系统任务”移动并重命名此文件时,出现了我的问题,似乎找不到这些变量的值并遇到错误:

错误:文件系统任务上的错误:0xC002F304,文件系统任务:>以下错误消息发生了错误:“找不到路径的一部分。”。

任务失败:文件系统任务

这是使用的变量列表和文件系统任务: http : //i.stack.imgur.com/p6FWD.png

在我看来,如果存在多个文件,您将如何决定哪个Excel文件最合适。 您是否需要遍历其中的多个? 无论如何,如果您使用Foreach Loop Container并将其设置为搜索目录,就像您的脚本一样,则不需要脚本任务。 因此,您可以执行以下操作:

  • 设置一个变量来保存文件路径
  • 添加Foreach Loop Container并配置以搜索目录并将映射变量映射到您刚刚设置的内容
  • 添加您的data flow
  • 在静态Excel Connection设置data flow后,在Connection Manager上设置一个expression ,以使用File Path Variable作为connection string
  • 添加文件系统任务并将源路径设置为变量

请注意,因为您可能需要动态构建目标路径,所以您可能需要更多的变量以更轻松的方式完成任务。

  1. FilePath-但仅保留来自foreeach loop文件名和扩展名
  2. FullFilePath-动态变量,使用表达式将该FilePath组合到要搜索的目录中,这将在Excel Connection管理器中用作文件系统任务的源。
  3. DestinationFullFilePath-这是一个将FilePath与目标目录结合在一起的表达式,它将用作文件系统任务上的目标。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM