2

フォルダ内のフラットファイルの束をループする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
4

2 に答える 2

3

ミレン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
于 2012-11-06T16:25:18.180 に答える
1

データフロータスク用のフラットファイルソースを作成したことを確認してください。既存のものがない場合は、ForEachループを介してフィードするファイルパスのプレースホルダーとして機能する一時的なものを作成します。

私が理解していることから、フラットファイル接続にインポートする各ファイルへのパスを渡す必要があります。これは、For Eachループで生成された変数を、フラットファイル接続のExpressionプロパティの式として追加することで簡単に実行できます。


アップデート:

Do...ループで条件を設定する必要があります。例:Loop While Not bolFinished。詳細については、このドキュメントを参照してください。

于 2012-11-03T23:17:09.650 に答える