4

SQL Server 通知を利用して、winform アプリ内のデータベースで挿入イベントをキャプチャしたいと考えています。SQLDependency オブジェクトを使用しようとしています。MSDN の記事を見ると、これはかなり単純明快に思えます。そこで、試してみるために小さなサンプル アプリケーションを作成しました。イベントは、最初にアプリケーションに入ったときにのみ発生するようです (MessageBox が表示されます)。テーブルにデータを挿入しても、OnChange イベントは発生しないようです。誰かが私に欠けているものを教えてもらえますか? ありがとう!

 public Main()
    {
        InitializeComponent();
        var check = EnoughPermission();
        SqlDependency.Stop(constr);
        SqlDependency.Start(constr);
        if(connection == null)
        {
            connection = new SqlConnection(constr);
        }
        if(command == null)
        {
            command = new SqlCommand("Select ID, ChatMessage FROM dbo.Chat",connection);
        }
        connection.Open();
        command.Notification = null;
        SqlDependency dependency = new SqlDependency(command);
        dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);
        command.ExecuteReader();
    }





    private void dependency_OnChange(object sender, SqlNotificationEventArgs e)
    {
        MessageBox.Show("Change!");
    }
4

2 に答える 2

11

クエリ通知の実装に取り​​組んでいるときに、正確な問題が発生しました。すべての構成、コードピース、さらにはTCP設定を確認しましたが、何も役に立ちませんでした。次に、データベースで実行する次のクエリを見つけて、問題を解決しました。多分あなたはそれを試すことができます。

ALTER AUTHORIZATION ON DATABASE::[Your DB] TO sa;
于 2011-10-13T15:51:18.880 に答える
6

最初の通知は、受け取る唯一の通知です。クエリ通知は変更のサブスクリプションではありません。通知が発生すると、それも無効になります。新しい通知サブスクリプションを再送信することになっています。

クエリがすぐに通知された場合は、変更の通知を受け取っていないことを意味しますが、無効なクエリの通知を受け取りました。受け取った SqlNotificationEventArgs 引数の値を確認してください。情報が挿入/更新/削除であることを確認し、ソースデータであることを確認し、タイプが変更であることを確認します。

ウォッチャー アプリケーションの例を見て、通知を受けたときに再サブスクライブする方法をよりよく理解してください。クエリ通知がどのように機能するかをよりよく理解するには、The Mysterious Notificationを参照してください。

于 2009-12-15T00:49:38.020 に答える