【问题标题】:SSIS - File System task cannot find file path after using script task to assign variableSSIS - 使用脚本任务分配变量后文件系统任务找不到文件路径
【发布时间】:2016-07-21 15:15:54
【问题描述】:

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

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

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

【问题讨论】:

  • 抱歉,为什么活动是并行的而不是顺序的?您不应该先运行导入然后移动文件吗?尝试使用整个路径设置变量 myConnectionString 而不仅仅是文件系统任务中的文件名;文件系统任务中的源变量和目标变量应该包含路径+文件名
  • 如果看代码 string[] filePath = Directory.GetFiles(directoryLocation, ".xls"); Dts.Variables["myConnectionString"].Value = filePath[0]; myConnectionString 是整个文件路径。我添加了一个额外的绿色箭头,希望它将 myConnectionString 的值保留到文件系统任务中,这似乎没有发生
  • ...一切正常,最好检查目标变量,路径是否正确等等...
  • 对不起,如果我问,我们必须验证所有情况...查看变量,文件夹 QELIZ 已经存在?
  • 今天刚回来检查它,我发现 System::UserName 变量有 QELIZ\\ 部分,这也导致了混乱!感谢您的帮助,当我使用“Watch”调试窗口时意识到。现在一切正常。

标签: c# excel file ssis ssis-2012


【解决方案1】:

在我看来,如果存在多个文件,您将如何确定最合适的 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 连接管理器并作为文件系统任务的源。
  3. DestinationFullFilePath - 这将是一个将 FilePath 与目标目录组合在一起的表达式,这将用作文件系统任务的目标。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多