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