SSIS - 进程无法访问该文件,因为它正由另一个进程使用

时间:2013-12-18 13:13:59

标签: c# .net sql-server ssis

我有以下数据流:

enter image description here

控制:

enter image description here

我只想将源文件夹中flatfiles的所有数据复制到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

10 个答案:

答案 0 :(得分:5)

这可能太明显了,但你是否尝试插入一个短暂的延迟来让数据流时间放开文件?例如,使用以下内容插入执行SQL任务:

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

或者,您可以处理故障路径并重试,可能是在延迟之后。

答案 1 :(得分:4)

我偶然发现了这个链接并发布此链接以帮助其他人也来到这里。

使用脚本任务时,请确保断开与Close()的连接或使用USING()内的连接。

在任务完成后保持连接,直到整个包完成,除非您执行上述任一操作。

答案 2 :(得分:4)

如果消息引用了您的“.ispac”文件,则表示您有一个未关闭的调试。进入任务管理器并关闭调试主机。

答案 3 :(得分:3)

如果您使用SSIS连接管理器中的Excel连接。 RetainSameConnection酒店。默认情况下是这样。把它弄错,你就会全力以赴。

答案 4 :(得分:2)

如果您使用的是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 { }
    }
}

答案 5 :(得分:1)

对我来说这个错误与SSIS无关,并且在最终任务没有响应BIDS之后发生

我的一个excel文件被BIDS调试器(DtsDebugHost.exe)锁定,关闭BIDS没有帮助。

最后使用http://filehippo.com/download_unlocker/向我展示了实际的储物柜,并简单地将其删除。

请注意解锁DtsDebugHost.exe后需要重新启动BIDS

答案 6 :(得分:1)

我将这个功能与等待例程一起使用:

2.1.3

答案 7 :(得分:0)

在执行文件操作之前,添加执行下面提到的行的脚本任务:

Public Sub Main()

将procList()视为Process = Process.GetProcesses()

将k设为整数

对于k = 0到procList.GetUpperBound(0)步骤k + 1

如果procList(k).ProcessName =“ EXCEL”然后

procList(k).Close()

procList(k).Dispose()

如果结束

下一步

GC.Collect()

GC.WaitForPendingFinalizers()

Dts.TaskResult = ScriptResults.Success

结束子

答案 8 :(得分:0)

我的解决方案:

  1. 转到任务管理器
  2. “详细信息”标签。 enter image description here
  3. 找到进程“ DtsDebugHost.exe”。
  4. 终止此过程。此过程可能有多个实例。杀死所有人。
  5. 重新执行SSIS程序包

答案 9 :(得分:-1)

您可以轻松地“文件系统任务”组件。

Image of Your Control Flow:

您可以将当前文件的名称作为参数传递给“文件系统任务”组件

Image for File System Task Setting

我自己进行了测试,一切正常!