2012-12-04 70 views
0

我有一個ssis項目,首先,我有一個Foreach文件枚舉器,裏面有多個任務。它在一般情況下工作完美無瑕,但是如果在枚舉器目錄中沒有文件,就會出現錯誤,問題是,我如何進行驗證或某種排序以避免它在運行時拋出錯誤?感謝SSIS驗證Foreach文件枚舉器

IMG鏈接

SSIS http://s15.postimage.org/l41py15aj/ssis.png 錯誤 http://s15.postimage.org/rj0qupc0b/ssiserror.png

+0

還有一種方法來檢查目錄是否存在?謝謝。 – anonymous1110

回答

3

你可以在Foreach循環之前有一個腳本任務,它基本上檢查文件和目錄。然後有一個precedence constraint來暫停程序包,如果其中一個目錄或文件不存在。

創建3個變量

Name  DataType 
Directory String 
Files  String 
Exists  int 

在腳本任務只是檢查,如果該目錄存在隨着文件,如果你需要,甚至枚舉子文件夾或檢查特定文件是否存在。你可以修改代碼該文件夾

if (Directory.Exists(Dts.Variables["User::Files"].Value.ToString())) 
{ 
if (Directory.GetFiles(Dts.Variables["User::Files"].Value.ToString()).Length != 0) 
    { 
     Dts.Variables["User::Exists"].Value = 1; 
    } 
      else 
      { 
       Dts.Variables["User::Exists"].Value = 0; 
      } 
     } 
     else 
     { 
      Dts.Variables["User::Exists"].Value = 0; 
     } 

在優先約束在檢查變量Exists

Evaluation operation : Expression 
    Expression   : @Exists==1 
的值

更新:

在您需要添加變量在ReadOnlyVariable節中的腳本標籤

+0

嗨,我得到一個錯誤:System.Reflection.TargetInvocationException:異常已被調用的目標引發。 ---> Microsoft.SqlServer.Dts.Runtime.DtsRuntimeException:元素在集合中找不到。當您嘗試在程序包執行期間從容器上的集合中檢索元素並且該元素不存在時,會發生此錯誤。 – anonymous1110

+0

請檢查我更新的答案! – praveen

0

我會成立於SQL任務的禁用表達斷言文件名是否有效。

我沒有SSIS這裏,但我會看它。

+0

嗨我試圖做到這一點,但是由於文件名變量在foreach循環枚舉器後被填滿,它將始終返回null,因爲條件將在forloop權限之前首先開始。 – anonymous1110

0

您知道這個特定的情況下發生錯誤時,你要處理它的腳本任務編輯器。如果它失敗了一些其他的無法預料的錯誤呢?

始終添加'的OnError'事件處理程序。

現在,使用事件處理程序處理的錯誤情況後,你可以選擇傳播完成這個錯誤要失敗的任務(這是默認的行爲),也可以設置系統變量,傳播完成,在你的「的OnError '事件處理程序到錯誤。這將允許在For Each之後的其餘代碼繼續正常。