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

Nic*_*ick 4 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!");
    }
Run Code Online (Sandbox Code Playgroud)

小智 11

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

ALTER AUTHORIZATION ON DATABASE::[Your DB] TO sa;
Run Code Online (Sandbox Code Playgroud)

  • 也为我工作.但我想了解这个查询所做的工作. (4认同)

Rem*_*anu 6

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

如果您的查询被立即通知,则意味着您没有收到有关更改的通知,而是收到无效查询的通知.检查您收到的SqlNotificationEventArgs参数的值.检查信息是插入/更新/删除,请检查来源是数据,检查类型是变化.

查看Watcher应用程序示例,以便更好地了解在通知时您应该如何重新订阅.要更好地了解查询通知的工作方式,请参阅神秘通知.