SQL Server通知 - 我的OnChange不会触发

时间:2009-12-15 00:20:58

标签: c# sql notifications sqldependency

我想利用SQL Server通知在winforms应用程序中捕获数据库中的插入事件。我试图使用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!");
    }

2 个答案:

答案 0 :(得分:11)

当我在执行查询通知时,我遇到了确切的问题。我检查了所有配置,代码片段,甚至TCP设置,但没有任何帮助。然后,我想出了以下查询在数据库上运行,它解决了我的问题。也许你可以尝试一下。

ALTER AUTHORIZATION ON DATABASE::[Your DB] TO sa;

答案 1 :(得分:6)

您的第一个通知是您收到的唯一通知。查询通知不是更改的订阅,一旦通知被触发,它也是无效的。您应该重新提交新的通知订阅。

如果您的查询被立即通知,则表示您没有收到更改通知,而是收到无效查询通知。检查您收到的SqlNotificationEventArgs参数的值。检查Info是否为插入/更新/删除,检查Source是否为数据,检查Type是否为更改。

查看Watcher Application示例,以便更好地了解在收到通知后您应该如何重新订阅。为了更好地了解查询通知的工作原理,请参阅The Mysterious Notification