我在SSIS面临一个问题。我刚刚将我的项目从VS 2005升级到VS 2012,我的所有软件包都在同一时间升级。 所有这些都运行良好,除了我在使用平面文件处理数据之前使用脚本任务检查文件中是否存在文件的情况。
自此升级以来,当我使用此脚本任务启动包时:
调用目标抛出了异常。 at System.RuntimeMethodHandle.InvokeMethod(Object target,Object [] arguments,Signature sig,Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object [] parameters,Object [] arguments) 在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化) at System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams) 在Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()**
然后它在end sub上崩溃并出现以下错误消息:
调用目标抛出了异常。 at System.RuntimeMethodHandle.InvokeMethod(Object target,Object [] arguments,Signature sig,Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj,Object [] parameters,Object [] arguments) 在System.Reflection.RuntimeMethodInfo.Invoke(Object obj,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化) at System.RuntimeType.InvokeMember(String name,BindingFlags bindingFlags,Binder binder,Object target,Object [] providedArgs,ParameterModifier [] modifiers,CultureInfo culture,String [] namedParams) 在Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTATaskScriptingEngine.ExecuteScript()**
如果我禁用Dts.Events.FireError,我在结束子上仍然遇到相同的错误
这是我的代码(Visual Basic 2012):
Imports System
Imports System.Data
Imports System.Math
Imports Microsoft.SqlServer.Dts.Runtime
<Microsoft.SqlServer.Dts.Tasks.ScriptTask.SSISScriptTaskEntryPointAttribute> _
<System.CLSCompliantAttribute(False)> _
Partial Public Class ScriptMain
Inherits Microsoft.SqlServer.Dts.Tasks.ScriptTask.VSTARTScriptObjectModelBase
Enum ScriptResults
Success = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Success
Failure = Microsoft.SqlServer.Dts.Runtime.DTSExecResult.Failure
End Enum
Public Sub Main()
Dim filepath As String
filepath = "\\localhost\MYPATH"
If My.Computer.FileSystem.FileExists(filepath) Then
If FileLen(filepath) > 0 Then
Dts.TaskResult = ScriptResults.Success
Else
Dts.Events.FireError(0, "FlatFile", "Error loading '" + filepath + "', flat file not found", String.Empty, 0)
Dts.TaskResult = ScriptResults.Failure
End If
Else
Dts.Events.FireError(0, "FlatFile", "Error loading '" + filepath + "', flat file not found", String.Empty, 0)
Dts.TaskResult = ScriptResults.Failure
End If
End Sub
结束班
答案 0 :(得分:2)
我希望问题是你没有为子程序提供返回状态
If My.Computer.FileSystem.FileExists(filepath) And FileLen(filepath) > 0 Then
Dts.TaskResult = ScriptResults.Success
Else
Dts.Events.FireError(0, "FlatFile", "Error loading '" + filepath + "', flat file not found", String.Empty, 0)
Dts.TaskResult = ScriptResults.Failure
End If
期望是一回事,但实际上调试是另一回事。我在您指定filepath的步骤中设置了一个断点。根本问题是FileLen
操作正在尝试检查不存在的文件的大小。在这里,您可以看到FileNotFoundException被抛出并且未处理。