为什么我在脚本任务连接器上得到对象引用未设置错误?

时间:2012-11-03 21:57:02

标签: sql-server-2005 ssis

我有一个SSIS包(SQL Server 2005),它循环遍历文件夹中的一堆平面文件。我需要等到源应用程序完成文件编写之后才能在平面文件导入任务中打开它。

我有一个For Each循环容器,其中包含一个在数据流任务之前执行的脚本任务。

当我尝试在脚本任务和数据流任务之间创建成功连接器时,我收到此错误:

  

无法创建连接器。对象引用未设置为实例   一个对象。

我知道某些东西被置之不理,但我看不到它。我在脚本任务和数据流任务上都将DelayValidation设置为true。我还缺少什么?

我是C#家伙所以也许我错过了VB中显而易见的东西。这是我从互联网上挖走的脚本:

Public Sub Main()
    Dim strFileName As String = CType(Dts.Variables("FileName").Value, String)
    Dim objFS As System.IO.FileStream
    Dim bolFinished As Boolean = False

    Do
        Try
            objFS = System.IO.File.Open(strFileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
            bolFinished = True
            objFS.Close()
        Catch ex As Exception
            System.Threading.Thread.Sleep(1000)
        End Try
    Loop

    If bolFinished Then
        Dts.TaskResult = Dts.Results.Success
    Else
        Dts.TaskResult = Dts.Results.Failure
    End If
End Sub

2 个答案:

答案 0 :(得分:3)

Milen k不仅仅是对的。看起来你有一个无限循环,它会打开一个文件几次,直到它崩溃。

您可以使用以下建议的代码更改您的代码。这将帮助您摆脱无限循环。

您当前的代码:

Do
    Try
        objFS = System.IO.File.Open(strFileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
        bolFinished = True
        objFS.Close()
    Catch ex As Exception
        System.Threading.Thread.Sleep(1000)
    End Try
Loop

建议代码:

Do While(true)
    Try
        objFS = System.IO.File.Open(strFileName, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
        bolFinished = True
        objFS.Close()
        Exit Do
    Catch ex As Exception
        System.Threading.Thread.Sleep(1000)
    End Try
Loop

答案 1 :(得分:1)

确保为数据流任务创建了平面文件源。如果您没有现有的那个,请创建一个临时的,作为通过For Each循环提供它的文件路径的占位符。

据我所知,您应该将路径传递给您将要导入平面文件连接的每个文件。这可以通过将For Each循环中生成的变量添加为平面文件连接的Expression属性中的表达式来轻松完成。


更新

您需要在Do ...循环中设置条件。例如:Loop While Not bolFinished。请查看this document以获取更多信息。