C# SSIS-将具有OLEDB连接的Excel文件移动到存档

C# SSIS-将具有OLEDB连接的Excel文件移动到存档,c#,sql-server,excel,ssis,C#,Sql Server,Excel,Ssis,我已经使用Microsoft Office 12.0 Access数据库引擎OLE DB Provider作为Excel模式创建了一个连接,以循环浏览Excel文件中的所有工作表,如本问题中所示 并使用Foreach ADO.NET架构行集枚举器循环遍历excel文件 现在一切正常,但从Excel导入数据后,我想将该文件移动到存档文件夹。并尝试使用文件系统任务,但我得到的错误如下 [文件系统任务]错误:错误消息如下:进程无法访问该文件,因为另一进程正在使用该文件 我还尝试了这个脚本任务。但是我遇

我已经使用Microsoft Office 12.0 Access数据库引擎OLE DB Provider作为Excel模式创建了一个连接,以循环浏览Excel文件中的所有工作表,如本问题中所示

并使用Foreach ADO.NET架构行集枚举器循环遍历excel文件

现在一切正常,但从Excel导入数据后,我想将该文件移动到存档文件夹。并尝试使用文件系统任务,但我得到的错误如下

[文件系统任务]错误:错误消息如下:进程无法访问该文件,因为另一进程正在使用该文件

我还尝试了这个脚本任务。但是我遇到了一些错误,无法解决这个错误,因为我对C语言一无所知

下面是我在尝试使用脚本任务移动文件时遇到的错误

在System.RuntimeMethodHandle.InvokeMethodObject目标处,对象[]参数,签名符号,布尔构造函数 在System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternalObject obj中,对象[]参数,对象[]参数 在System.Reflection.RuntimeMethodInfo.InvokeObject obj中,BindingFlags invokeAttr、Binder Binder、Object[]参数、CultureInfo区域性 在System.RuntimeType.InvokeMemberString名称、BindingFlags BindingFlags、Binder Binder、对象目标、对象[]提供的参数、参数修改器[]修饰符、CultureInfo区域性、字符串[]namedParams 位于Microsoft.SqlServer.Dts.Tasks.ScriptTask.vstatasksscriptingengine.ExecuteScript

更新:

这是我尝试移动文件的完整代码

如果我在enum ScriptResults中添加断点,我不会得到该弹出窗口,任务会成功完成,文件也会被移动到存档,但是如果我在C代码中没有添加任何断点,我会得到该弹出窗口,文件不会移动到存档

#region Namespaces
using System;
using System.Data;
using Microsoft.SqlServer.Dts.Runtime;
using System.Windows.Forms;
using System.IO;
#endregion

namespace ST_9fc6ad7db45c4a7bb49f303680f789ef
{
    [Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute]
public partial class ScriptMain :     Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
    {
        public void Main()
        {
            DirectoryInfo di = new     DirectoryInfo(Dts.Variables["SplitSkill_FolderPath"].Value.ToString());

            FileInfo[] fi = di.GetFiles("*.xlsx");
            String filename = fi[0].Name;

            string sourceFileName = filename;
            string destinationFile = @"D:\Flipkart\Data\Split     Skill\Archive\" + sourceFileName;
            string sourceFile = @"D:\Flipkart\Data\Split Skill\" +     sourceFileName;

            if (File.Exists(destinationFile))
                File.Delete(destinationFile);
            // To move a file or folder to a new location:
            System.IO.File.Move(sourceFile, destinationFile);

            Dts.TaskResult = (int)ScriptResults.Success;
        }

        #region ScriptResults declaration
        enum ScriptResults
        {
            Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success,
            Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
        };
        #endregion

    }
}

据我所知,我认为你有一项任务是在表格中循环,另一项任务是在文件中循环。因此,在foreach循环中可能有两个任务。尝试使用系统任务在foreach循环中复制文件

对于可执行文件

c:\windows\system32\cmd.exe
对于这样的争论

C COPY "C:\xxx\abc\\Destination_template.accdb" "C:\xxx\abc\\Destination_template.accdb"Destination_template - Kopie.accdb"
然后创建一个文件系统任务,将该副本移动到存档中。
这可能不是最好的方法,但应该有效

显然,文件可能会被其他进程打开或访问。在尝试存档文件之前,请确保在导入后释放该文件。如何释放该文件?我在谷歌上试过,但什么也找不到。请显示你的C代码。从这个链接,我使用的是C代码。你的脚本任务有什么错误?