したがって、単純な選択クエリを実行しています:
Private Function ReturnTableQuery(ByVal SQL As String) As DataTable
Dim rs As DataTable = New DataTable
Dim Adapter As NpgsqlDataAdapter = New NpgsqlDataAdapter
Try
If conn Is Nothing Then
ConnectDatabase()
End If
If conn.State <> ConnectionState.Open Then
ConnectDatabase()
End If
Adapter.SelectCommand = New NpgsqlCommand(SQL, conn)
Adapter.SelectCommand.CommandTimeout = 10
Adapter.Fill(rs)
Catch ex As Exception
PreserveStackTrace(ex)
Throw ex
End Try
Return rs
End Function
SQL コマンドは次のとおりです。
Select id, application, datetimestamp, status, data, attemptcount from queue where application='reportengine' and status=4 and datetimestamp <= now() order by datetimestamp limit 1
0 行が返されることがあります。
プログラムで失敗しているときに pgAdmin でまったく同じクエリを実行すると、期待どおりの行が返されます。
接続を閉じて再度開くと機能しますが、接続に問題があるかどうかを事前に判断できません。
毎回接続を再開することもできますが、必要な頻度で接続を再作成したくありません。
また、「不明なサーバー応答」などの断続的なエラーが発生し、これをキャッチして接続を再開しています。
接続が非常に壊れやすい理由と、実際の接続状態を確認するための安価な方法はありますか?
Thx、ブラッド