打开Excel的SSIS C#脚本任务导致调用错误
我有一个打开Excel的SSIS C#脚本任务导致调用错误,c#,excel,ssis,script-task,ssis-2017,C#,Excel,Ssis,Script Task,Ssis 2017,我有一个SSIS包,它有一个脚本任务,可以从Excel中读取。 我得到以下错误,似乎无法找到问题 调用的目标已引发异常 位于System.RuntimeMethodHandle.InvokeMethod(对象目标,对象[] 参数、签名sig、布尔构造函数)位于 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象obj, 对象[]参数,对象[]参数)位于 System.Reflection.RuntimeMethodInfo.In
SSIS包
,它有一个脚本任务,可以从Excel
中读取。
我得到以下错误,似乎无法找到问题
调用的目标已引发异常
位于System.RuntimeMethodHandle.InvokeMethod(对象目标,对象[]参数、签名sig、布尔构造函数)位于 System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(对象obj, 对象[]参数,对象[]参数)位于 System.Reflection.RuntimeMethodInfo.Invoke(对象obj,BindingFlags invokeAttr,绑定器绑定器,对象[]参数,CultureInfo区域性) 在System.RuntimeType.InvokeMember处(字符串名称,BindingFlags bindingFlags、绑定器绑定器、对象目标、对象[]提供的参数、, ParameterModifier[]修饰符,CultureInfo区域性,字符串[] 命名参数)在 Microsoft.SqlServer.Dts.Tasks.ScriptTask.vstatasksscriptingEngine.ExecuteScript() 我已将问题缩小到这两行,在这两行中设置
Excel
应用程序
Excel.Application xlApp;
xlApp = new Excel.ApplicationClass();
似乎是xlApp
的值设置导致了错误
我正在使用Visual Studio 2017
有人能帮我吗
调用的目标已引发异常
是发生错误时脚本任务引发的常规异常
读取真正的错误消息
要读取主错误消息,可以在代码中添加try-catch子句,并使用Dts.firererror()方法引发真正的异常
public void Main()
{
try{
Excel.Application xlApp;
xlApp = new Excel.ApplicationClass();
//...rest of code here
Dts.TaskResult = (int)ScriptResult.Success;
}catch(Exception ex){
Dts.FireError(0,"An error occured", ex.Message,String.Empty, 0);
Dts.TaskResult = (int)ScriptResult.Failure;
}
}
试图找出问题所在
Excel.Application
而不是ApplicationClass
Excel.Application xlApp = new Excel.Application();
为什么要将SQL Server(Microsoft.SqlServer)与Excel一起使用?我正在从文件夹中读取Excel,但他们倾向于重命名工作表。因此,脚本任务是读取工作表名称,以便它可以正确地从文件中读取。因此,您必须打开每个excel文件“.xls”,然后通过工作表名称进行枚举。之后,我找到了它。该包由用户通过SSMS上的作业运行。我必须在运行包的服务器上的作业中创建运行包的用户。这似乎使它能够访问服务器上的Excel函数。我将它放在一个try/catch块中,并在“无法访问文件”周围出现了一个错误。在try/catch读取Excel的工作表名称后,我将文件移动到另一个位置。奇怪的是,它继续很好地移动文件,但随后在上面触发try的catch子句,表示它无法访问文件?是的,在try/catch结束之前,我执行
xlApp.Workbooks.Close()
和xlApp.Quit()