代码之家  ›  专栏  ›  技术社区  ›  Rajaprabhu Aravindasamy

当表数据发生更改时,如何在前端触发NOTIFICATION事件

  •  2
  • Rajaprabhu Aravindasamy  · 技术社区  · 11 年前

    我正在努力利用 Notification 由给定的事件 Npgsql 在vb.net中。我对这种机制有了部分了解,我学到的是,当某个特定表的数据发生变化时,它 trigger 会被解雇,所以在里面 触发 我们可以 notify 到前端大约 data change .

    我设法在前端运行了以下代码

    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
    

    上面的代码正在解决任何问题。但我想知道的是如何创建 触发 哪个会 notifies 关于前端的数据更改 Notification event 在我的前端被解雇了?我需要打电话到哪里 listen .? 我需要打电话吗 对于每个查询的执行。?有谁能用一些样本代码来澄清我的疑虑吗。?

    1 回复  |  直到 11 年前
        1
  •  0
  •   Rajaprabhu Aravindasamy    11 年前

    前端:

    Public Sub test()
    
    Dim conn = New NpgsqlConnection(" Server=server; 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("update testtable set field='test' where id=1", conn)
    Dim x As NpgsqlDataReader = command.ExecuteReader
    End Sub
    
    Private Sub NotificationSupportHelper(ByVal sender As Object, ByVal e As NpgsqlNotificationEventArgs)
        MsgBox(e.Condition)
    End Sub
    

    触发:

    CREATE OR REPLACE FUNCTION testingNotify()
      RETURNS trigger AS
    $BODY$ 
        begin
           notify notifytest;
           return null;
        end;     
    $BODY$
      LANGUAGE plpgsql VOLATILE
      COST 100;
    ALTER FUNCTION testingNotify() OWNER TO testserver;
    

    这个 trigger 如果 Insert delete update 发生在桌子上 testtable .所以在上面的代码中,在名为 test ,我写了一个查询 updating the table tabletest ,因此在执行查询时 NotificationSupportHelper 接到电话。