通过nPgSQL接收NOTIFY有效负载

时间:2013-04-19 06:44:51

标签: c# .net database npgsql

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

我尝试使用PostgreSQL的NOTIFYLISTEN功能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 test, 'Hello world'(其中Hello world是有效负载,换句话说,附加信息)。

我想在Notification事件处理程序NotificationSupportHelper中获取其他信息。所以为了得到它我只是试图访问NpgsqlNotificationEventArgs的成员。但是我在那次尝试中失败了,因为它只包含PID和Condition作为其成员。所以我决定看看NPGQL documentation,从那里,我得到了,没有办法在NPGSQL vers 1.0中获得更多信息。但他们在第二版(NPGSQL V 2.0)中为NpgsqlNotificationEventArgs提供了一个名为AdditionalInformation的额外成员。但它目前也正在建设中。此属性将始终返回String.Empty(来自docs)。

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

1 个答案:

答案 0 :(得分:1)

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

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