SQL Server 通知 - 我的 OnChange 没有触发

Posted

技术标签:

【中文标题】SQL Server 通知 - 我的 OnChange 没有触发【英文标题】:SQL Server Notifications - My OnChange does not fire 【发布时间】:2009-12-15 00:20:57 【问题描述】:

我想利用 SQL Server 通知在 winforms 应用程序中的数据库中捕获插入事件。我正在尝试使用 SQLDependency 对象。 MSDN 文章使这看起来非常简单。所以我创建了一个小示例应用程序来尝试一下。该事件似乎仅在我第一次进入我的应用程序时触发(出现消息框)。将数据插入表中不会引发看起来的 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!");
    

【问题讨论】:

你在哪里插入数据? SELECT 语句不是 INSERT。 我正在将数据插入到查询分析器中。很好地调用 INSERT 不是 SELECT :) Select 需要向数据库表明您正在查看哪些数据以获取通知。 请注意,我正在将该 SELECT 交给 SqlDendency 对象。 【参考方案1】:

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

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

【讨论】:

也为我工作。但我想了解这个查询做了什么。 The proposed new database owner is already a user or aliased in the database.【参考方案2】:

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

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

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

【讨论】:

所以我的选择无效? info 属性具有“无效”。谢谢 我会看看你发送的这些链接! SELECt 本身对我来说似乎是有效的,但还有更多的标准。见msdn.microsoft.com/en-us/library/ms181122(SQL.90).aspx

以上是关于SQL Server 通知 - 我的 OnChange 没有触发的主要内容,如果未能解决你的问题,请参考以下文章

SqlDependency通知sql server 2005不会在多个插入上触发

Azure SQL Server LTR 备份通知

SqlDependency/Query 通知 - SQL Server 重新启动

SQL Server 代理作业在失败时通知多个操作员

触发从 SQL Server 数据库到 asp.net 应用程序的通知 [关闭]

一个 sql server 可以处理多少个 SQL 作业?