2013-12-18 21 views
1

我有以下數據流:SSIS - 因爲它正由另一個進程的進程無法訪問該文件

enter image description here

控制:

enter image description here

我只是想複製所有從源文件夾中的平面文件到sql數據庫的數據以及複製後將這些文件移動到名爲Done的文件夾。

但是,當我運行它,我得到錯誤:

[File System Task] Error: An error occurred with the following error message: "The process cannot access the file because it is being used by another process.". 

數據被複制到SQLSERVER,但文件不會移動。

我的過程標籤如下:

enter image description here

+1

你有沒有機會讓這個文件打開閱讀?另見[另一個進程使用的文件](http://billfellows.blogspot.com/2013/04/file-in-use-by-another-process.html) – billinkc

回答

3

這可能是太明顯了,但你嘗試過將在短暫的延遲給數據流的時間,讓文件的旅途?例如,插入一個類似內容的執行SQL任務:

-- Wait for 1 second 
WAITFOR DELAY '00:00:01' 

或者,你可以處理失敗路徑,然後重試,也許延遲之後。

3

如果您正在使用來自SSIS連接管理器的Excel連接。有一個屬性RetainSameConnection。這是默認情況下。把它弄虛假,你會一切都安定下來。

1

對於我這個錯誤無關,與SSIS和任務未響應BIDS

我的Excel文件之一是得到由BIDS調試器(DtsDebugHost.exe),該關閉BIDS不利於鎖定結束後發生的。

最後使用http://filehippo.com/download_unlocker/顯示我實際的儲物櫃,也簡單地刪除它。

請注意,BIDS需要解鎖DtsDebugHost.exe

1

我一前一後使用此功能與等待程序後重新啓動:

public bool IsFileLocked(string filePath) 
{ 
    try 
    { 
     //Open the file exclusively 
     using (File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.None)) { } 
    } 
    catch (IOException e) 
    { 
     var errorCode = Marshal.GetHRForException(e) & ((1 << 16) - 1); 
     return errorCode == 32 || errorCode == 33; 
    } 

    return false; 
} 
1

我發現偶然此鏈接並張貼此幫助其他人也來到這裏。

使用腳本任務時,請確保使用Close()刪除連接或在USING()中使用連接。

任務完成後直到整個包完成,除非您執行上述任一操作,否則將保持連接。

2

如果這些消息引用了您的「.ispac」文件,則說明您沒有關閉調試。進入任務管理器並關閉調試主機。

1

如果您正在使用Excel連接,請在嘗試移動/重命名文件之前,在腳本任務中使用下面的代碼(C#)關閉所有Excel進程。

System.Diagnostics.Process[] proc=System.Diagnostics.Process.GetProcessesByName("Excel"); 
foreach (System.Diagnostics.Process p in proc) 
{ 
    if (!string.IsNullOrEmpty(p.ProcessName)) 
    { 
     try 
     { 
      p.Kill(); 
     } 
     catch { } 
    } 
} 
相關問題