1

私はvb.netNotificationで与えられたイベントを利用しようとしています。Npgsql私はこのメカニズムについて部分的に考えました。私が学んだことは、特定のテーブルのデータが変更されると、そのデータがtrigger起動されるので、内部でフロントエンドtriggerにアクセスできるということでした。notifydata 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

上記のコードは問題なく動作しています。しかし、私が知りたいのは、フロントエンドのデータがフロントエンドに変更され、その結果、フロントエンドが起動されるようにする方法を作成する方法ですtrigger。どこに電話する必要がありますか。各クエリの実行を呼び出す必要がありますか?誰かが私の疑問をいくつかのサンプルコードで明らかにすることができますか?notifiesNotification eventlistenlisten

4

1 に答える 1

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

引き金:

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は、 table 内でInsertor deleteorupdateが発生した場合に発生しますtesttable。したがって、上記のコードでは、 という名前のプロシージャ内で、testのクエリを作成していたupdating the table tabletestので、クエリの実行中にNotificationSupportHelperが呼び出されます。

于 2013-03-18T09:37:46.903 に答える