通过nPgSQL接收NOTIFY有效负载

本文关键字:有效 负载 NOTIFY 接收 nPgSQL 通过 | 更新日期: 2023-09-27 18:09:53

目前,我使用NPGSQL连接器将PostgreSQL数据库与我的应用程序连接在VB.Net中。

我尝试使用PostgreSQL的LISTENNOTIFY功能将特定表的表更改NOTIFY到前端。我从那次尝试中得到了积极的结果。我成功地从后端收到了前端的通知。为了达到这个目的,我尝试了以下方法:

Public Sub test()
Dim conn = New NpgsqlConnection("Server=servername;port=portNo; _
           User Id=UID;pwd=PWD;DataBase=DB;")
conn.Open()
Dim command = New NpgsqlCommand("listen notifytest;", conn)
command.ExecuteNonQuery()

AddHandler conn.Notification, AddressOf NotificationSupportHelper
command = New NpgsqlCommand("notify notifytest;", conn)
command.ExecuteNonQuery()
End Sub
Private Sub NotificationSupportHelper(ByVal sender As Object, _
                                      ByVal e As NpgsqlNotificationEventArgs)
'Notified here.
End Sub

这工作得很好,但是,PostgreSQL有一个全新的notify特性,其中notify可以有一个有效负载,如NOTIFY test, 'Hello world'(其中Hello world是有效负载,换句话说,附加信息)。

我想在通知事件处理程序NotificationSupportHelper中获得附加信息。所以为了得到它,我只是尝试访问NpgsqlNotificationEventArgs的成员。但是我在那个尝试中失败了,因为它只包含PID和条件作为其成员。所以我决定看一下NPGQL文档,从那里,我得到了,没有办法在NPGSQL vers 1.0中获得额外的信息。但是他们在第二版(NPGSQL V 2.0)中为NpgsqlNotificationEventArgs提供了一个额外的成员AdditionalInformation。但它目前也在建设中。这个属性将返回字符串。always为空(来自文档)。

所以我希望你们理解我想要完成的事情,我只需要在notification被提出时在前端收到payload。有人知道如何达到我的要求吗?是否有其他connector可用而不是NPGSQL来有效地处理前端的notification event,这意味着在前端获得payload

通过nPgSQL接收NOTIFY有效负载

以防其他人有这个问题。现在可以使用AdditionalInformation属性。

Private Sub NotificationSupportHelper(ByVal sender As Object,
                                  ByVal e As NpgsqlNotificationEventArgs)
    MsgBox(e.Condition & " " & e.AdditionalInformation)
End Sub