簡體   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