2013-03-18 61 views
1

我正尝试使用vb.net中Npgsql给出的Notification事件。我部分了解了这种机制,我所学到的是,当某个表格的数据发生变化时,其trigger将被解雇,因此在trigger之内,我们可以将notify转移到前端约data change如何在表格数据发生变化时触发前端的NOTIFICATION事件

我设法在我的前端

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 

上面的代码正在与任何问题,运行此下面的代码。但是我想知道的是如何创建一个trigger这将notifies关于数据更改到前端,结果在我的前端Notification event被解雇?我在哪里需要拨打listen。?我是否需要为每个查询的执行调用listen?任何机构都可以用一些示例代码来澄清我的疑惑。

+1

@DOWNVOTER有胆量。?然后指定原因。 – 2013-04-10 08:55:09

回答

0

前端:

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 

TRIGGER:

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; 

上面给出如果Insertdeleteupdate发生在表testtable将被解雇的trigger。所以在上面的代码中,在名为test的过程中,我写了一个查询updating the table tabletest,因此在执行查询时调用了NotificationSupportHelper

+0

您是否必须暂停您用来附加活动的连接? – 2016-04-19 05:18:41

相关问题