Suddenly getting an error "Operation is not valid due to the current state of the object" in VB.net with Oracle 11g Database

71 Views Asked by At

A batch job runs at every night and it had been successed until yesterday.

It gave this exception, "Operation is not valid due to the current state of the object",suddenly today. I didn't change any codes. (Actually I didn't write this code, someone did)

I don't get it at all, what is it happening?

I can't specify whether it comes from its environment, code or data.

Only I can say was that this error occurred at this line Dim rotate As Short = DirectCast(dr("ROTATE"), Short)

Stacktrace from log:

Oracle.DataAccess.Client.OracleDataReader.GetOrdinal(String name) Oracle.DataAccess.Client.OracleDataReader.get_Item(String columnName) MyProject.Package.Filing.Core.Yakan.LinkDataCreate.ImageCreateWorker.Execute(Object obj)

I need some help.

This is my code:

   Public Sub Execute(ByVal obj As Object)

    Dim errorCount As Integer = 0

    ' 2018/06/18
    LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute(),開始")

    Do
        If errorCount >= Me._retryCount Then
            Dim message As String = String.Format("Worker処理でエラーが発生しました。基準年:{0}、IJP:{1}", Me._kijunNen, Me._ijp)
            Dim newEx As FilingException = New FilingException(message, String.Empty)
            LogManager.GetLogger.PutLog(LogLevel.Error, newEx, String.Empty)
            Throw newEx
        End If

        'イメージは順次取得する。
        Using agent As New ImageCommandAgent
            agent.Kijun_nen = Me._kijunNen
            agent.HonpyoIJP = Me._ijp
            agent.IsRyomen = Me._isRyomen

            Using codec As New Codecs.RasterCodecs()

                ' ディスクメモリ使用フラグ
                codec.Options.Load.DiskMemory = Me._diskMemoryFlg

                Dim image As RasterImage = Nothing

                ' 2018/06/19
                LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute() ExecuteReader,開始")

                Using dr As System.Data.Common.DbDataReader = agent.ExecuteReader(Me._dbConnection)

                    ' 2018/06/19
                    LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute() ExecuteReader,終了,IJP:{0}", agent.HonpyoIJP))

                    Try
                        While dr.Read()

                            ' 2018/06/19
                            LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute() IMAGE_DATA MemoryStream,開始")

                            Using ms As New IO.MemoryStream(DirectCast(dr("IMAGE_DATA"), Byte())), _
                                  singleImage As RasterImage = codec.Load(ms)

                                ' 2018/06/19
                                LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute() IMAGE_DATA MemoryStream,終了,IJP:{0}", agent.HonpyoIJP))
                                'I get an exception here
                                **Dim rotate As Short = DirectCast(dr("ROTATE"), Short)**
                                If rotate <> 0 Then

                                    ' 2018/06/19
                                    LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute() Rotate,開始")

                                    Dim Rcommand As RotateCommand = New RotateCommand()
                                    Rcommand.Angle = rotate * 9000
                                    Rcommand.Run(singleImage)

                                    ' 2018/06/19
                                    LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute() Rotate,終了,IJP:{0}", agent.HonpyoIJP))

                                End If

                                'グレースケールに変換してから本体に追加する。

                                ' 2018/06/19
                                LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute() Grayscale,開始")

                                Dim command As New GrayscaleCommand()
                                command.BitsPerPixel = 8
                                command.Run(singleImage)

                                ' 2018/06/19
                                LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute() Grayscale,終了,IJP:{0}", agent.HonpyoIJP))

                                If image Is Nothing Then
                                    image = singleImage.CloneAll    '最初の一枚
                                Else
                                    ' 2018/06/19
                                    LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute() AddPage,開始")

                                    image.AddPage(singleImage) '追加

                                    ' 2018/06/19
                                    LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute() AddPage,終了,IJP:{0}", agent.HonpyoIJP))

                                End If

                            End Using
                        End While

                    Catch ex As System.Exception
                        ' 異常終了
                        If Not image Is Nothing Then
                            image.Dispose()
                            image = Nothing
                        End If

                        Dim message As String = String.Format("【警告】帳票イメージの取得に失敗しました。基準年:{0}、IJP:{1}", Me._kijunNen, Me._ijp)
                        Dim newEx As FilingException = New FilingException(message, ex, String.Empty)
                        LogManager.GetLogger.PutLog(LogLevel.Warning, newEx, String.Empty)
                        LogManager.GetLogger.PutLog(LogLevel.Warning, ex.Message)
                        LogManager.GetLogger.PutLog(LogLevel.Warning, ex.StackTrace)

                        errorCount = errorCount + 1
                        Continue Do

                    End Try
                End Using ' ■■ datareader ■■

                Try
                    ' 2018/06/19
                    LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute() フォルダ検索,開始")

                    If Not System.IO.Directory.Exists(PathName) Then
                        CreateDirectory(PathName)
                    End If

                    ' 2018/06/19
                    LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute() フォルダ検索,終了,IJP:{0}", agent.HonpyoIJP))

                    ' 2018/06/19
                    LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute() ファイル検索,開始")

                    If IO.File.Exists(FileFullPath) Then
                        ' saveメソッドでは上書き不可のため、消しておく
                        IO.File.Delete(FileFullPath)
                    End If

                    ' 2018/06/19
                    LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute() ファイル検索,終了,IJP:{0}", agent.HonpyoIJP))

                    ' 2018/06/19
                    LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::Execute() イメージ保存,開始")

                    Select Case ImageMode
                        Case "BINARY"
                            '’■■二値のマルチTIFで保存する場合■■
                            codec.Save(image, FileFullPath, RasterImageFormat.CcittGroup4, 1)

                        Case "BINARY-DITH"
                            '' ■■ディザリングを指定して二値で保存する場合■■
                            image.DitheringMethod = RasterDitheringMethod.FloydStein
                            codec.Options.Save.UseImageDitheringMethod = True
                            codec.Save(image, FileFullPath, RasterImageFormat.CcittGroup4, 1)

                        Case "GRAY"
                            '' ■■グレースケールのマルチTIFで保存する場合■■
                            codec.Options.Jpeg.Save.QualityFactor = 255
                            codec.Save(image, FileFullPath, RasterImageFormat.TifJpeg, 8)

                        Case Else
                            '' その他の場合、おすすめのグレーで保存します。
                            codec.Options.Jpeg.Save.QualityFactor = 255
                            codec.Save(image, FileFullPath, RasterImageFormat.TifJpeg, 8)

                    End Select

                    ' 2018/06/19
                    LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute() イメージ保存,終了,IJP:{0}", agent.HonpyoIJP))

                Catch ex As System.Exception
                    ' 異常終了
                    If Not image Is Nothing Then
                        image.Dispose()
                        image = Nothing
                    End If

                    Dim message As String = String.Format("【警告】イメージファイルの出力に失敗しました。基準年:{0}、IJP:{1}", Me._kijunNen, Me._ijp)
                    Dim newEx As FilingException = New FilingException(message, ex, String.Empty)
                    LogManager.GetLogger.PutLog(LogLevel.Warning, newEx, String.Empty)
                    LogManager.GetLogger.PutLog(LogLevel.Warning, ex.Message)
                    LogManager.GetLogger.PutLog(LogLevel.Warning, ex.StackTrace)

                    errorCount = errorCount + 1
                    Continue Do
                Finally
                    If Not image Is Nothing Then
                        image.Dispose()
                        image = Nothing
                    End If
                End Try

                ' 2018/06/18
                LogManager.GetLogger.PutLog(LogLevel.Information, String.Format("ImageCreateWorker::Execute(),終了,IJP:{0}", Me._ijp))

                Exit Do

            End Using ' codec
        End Using ' agent
    Loop

    ' スレッド終了通知
    ' 2019/11/03 try-catch にして例外を取得する
    'OnFinishedEventHandler(EventArgs.Empty)
    Try
        LogManager.GetLogger.PutLog(LogLevel.Information, "ImageCreateWorker::スレッドの終了通知")
        OnFinishedEventHandler(EventArgs.Empty)

    Catch ex As System.Exception
        Dim message As String = "スレッドの終了通知に失敗"
        Dim newEx As FilingException = New FilingException(message, ex, String.Empty)
        LogManager.GetLogger.PutLog(LogLevel.Warning, newEx, String.Empty)

    End Try

End Sub
0

There are 0 best solutions below