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

时间:2016-07-21 15:15:54

标签: c# excel file ssis ssis-2012

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

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

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,它本身不起作用,但如果首先执行脚本任务,则会起作用,这使我相信它正确地分配了我的变量。

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

  

错误:0xC002F304在文件系统任务,文件系统任务:出现错误>以下错误消息:"找不到路径的一部分。"。

     

任务失败:文件系统任务

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

1 个答案:

答案 0 :(得分:0)

在我看来,如果存在多于1个文件,您将如何决定哪个Excel文件最合适?你需要循环遍历其中的多个吗?无论如何,如果您使用Foreach Loop Container并将其设置为搜索目录,就像您的脚本一样,您将不需要脚本任务。所以你可以这样做:

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

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

  1. FilePath - 但只保留bool
  2. 中的文件名和扩展名
  3. FullFilePath - 使用表达式将FilePath组合到正在搜索的目录的动态变量,这将在Excel Connection管理器中使用,并作为文件系统任务的源。
  4. DestinationFullFilePath - 这是一个将FilePath与目标目录相结合的表达式,这将用作文件系统任务的目标。