Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQL Server通知-我的OnChange未启动_C#_Sql_Notifications_Sqldependency - Fatal编程技术网

C# SQL Server通知-我的OnChange未启动

C# SQL Server通知-我的OnChange未启动,c#,sql,notifications,sqldependency,C#,Sql,Notifications,Sqldependency,我想利用SQL Server通知在winforms应用程序中捕获数据库中的插入事件。我正在尝试使用SQLDependency对象。MSDN的文章让这看起来很直截了当。所以我创建了一个小的示例应用程序来尝试一下。事件似乎仅在我第一次进入应用程序时触发(MessageBox出现)。向表中插入数据不会引发看起来像是OnChange事件。有人能告诉我我错过了什么吗?谢谢 public Main() { InitializeComponent(); var che

我想利用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!");
    }

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

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


请看一看该示例,以便更好地了解在收到通知时应该如何重新订阅。要更好地了解查询通知是如何工作的,请参阅。

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

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

你在哪里插入数据?SELECT语句不是INSERT。我正在查询分析器中插入数据。。插入时的良好调用不是SELECT:)SELECT需要向数据库表示您正在监视哪些数据以获取通知。请注意,我正在将该SELECT交给SQLDENCY obj。因此,我的SELECT无效?info属性具有“无效”。谢谢,我会看看你发送的这些链接!SELECt本身在我看来是有效的,但还有更多的标准。看,这对我也有帮助。但是我想了解这个查询做了什么。
提议的新数据库所有者已经是一个用户或在数据库中有别名。