Postgresql NPGSQL select查询间歇性地不返回任何行

Postgresql NPGSQL select查询间歇性地不返回任何行,postgresql,ado.net,npgsql,Postgresql,Ado.net,Npgsql,我正在运行一个简单的select查询: 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 Connect

我正在运行一个简单的select查询:

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
私有函数ReturnTableQuery(ByVal SQL作为字符串)作为DataTable
Dim rs As DataTable=新数据表
作为NpgsqlDataAdapter的Dim适配器=新的NpgsqlDataAdapter
尝试
如果康恩什么都不是
ConnectDatabase()
如果结束
如果连接状态连接状态打开,则
ConnectDatabase()
如果结束
Adapter.SelectCommand=新的NpgsqlCommand(SQL,conn)
Adapter.SelectCommand.CommandTimeout=10
适配器填充(rs)
特例
保存堆栈跟踪(ex)
投手
结束尝试
返回rs
端函数
SQL命令是:

Select id, application, datetimestamp, status, data, attemptcount from queue where application='reportengine' and status=4 and datetimestamp <= now()  order by datetimestamp limit 1

从队列中选择id、application、datetimestamp、status、data、attemptcount,其中application='reportengine'和status=4以及datetimestamp是否在多个线程之间共享连接?Npgsql和其他数据提供程序一样,不是线程安全的。我认为这是造成你问题的最可能原因。您应该打开一个连接,使用它,然后关闭它。这是使用连接池时最具可伸缩性的模式。我希望有帮助

你说得对!这不是我第一个使用npgsql的多线程应用程序,但这次我确实尝试通过共享类共享线程之间的连接。我将重构。