SSIS(VS 2012)VB脚本组件问题

时间:2014-04-14 15:15:35

标签: sql-server vb.net ssis

我在SSIS面临一个问题。我刚刚将我的项目从VS 2005升级到VS 2012,我的所有软件包都在同一时间升级。 所有这些都运行良好,除了我在使用平面文件处理数据之前使用脚本任务检查文件中是否存在文件的情况。

自此升级以来,当我使用此脚本任务启动包时:

  • 如果文件存在于文件夹中,则效果很好。
  • 如果文件丢失,它会在" else"之后崩溃。条款: Dts.Events.FireError(0," FlatFile","加载错误'" +文件路径+"',找不到平面文件" ,String.Empty,0),并显示以下错误消息:
  

调用目标抛出了异常。      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

结束班

1 个答案:

答案 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被抛出并且未处理。

enter image description here