的SqlDependency不会触发插入行(或更新或删除)(SqlDependency doesn&

2019-10-21 19:43发布

扑我的头靠在墙上为接下来的几个小时,我慢慢开始意识到在我的问题奠定了,所以让我给你一个回顾后:我想当行被插入到数据库来改变网站的字符串, 但由于某些原因,告诉我,我所做的触发时,有过变化到数据库不火都什么时候插入,UDPATE或无论发生什么事。 该表的服务代理上。

这是所涉及的代码:

namespace WebApplication.SignalR_Data
{
    public class NotificationRepository
    {
        public NotificationInfo GetData()
        {
            using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["ReservationDbContext"].ConnectionString))
            {
                connection.Open();
                using (SqlCommand command = new SqlCommand(@"SELECT COUNT(*) FROM dbo.Reservations", connection))
                {
                    command.Notification = null;

                    SqlDependency dependency = new SqlDependency(command);
                    dependency.OnChange += new OnChangeEventHandler(dependency_OnChange);

                    if (connection.State == System.Data.ConnectionState.Closed)
                        connection.Open();

                    return new NotificationInfo { RowCount = (int)command.ExecuteScalar(), Date = DateTime.Now };

                }
            }
        }

// This is the method that handles the trigger.
        public void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            if (e.Type == SqlNotificationType.Change)
            {
                NotificationHub.Show();
            }
        }
    }
}

我想,它不工作,因为我犯了错,但遗憾的是我没能发现他们没有。

通过NotificationHub.Show(); 消息被广播到与更新的行数和日期网站的所有客户端,但绝不会在发送的消息,因为触发不火。 有任何想法吗?

先感谢您!

Answer 1:

您需要重新注册getData()方法用于继续接收事件。 像这样:

public void dependency_OnChange(object sender, SqlNotificationEventArgs e)
        {
            if (e.Type == SqlNotificationType.Change)
            {
                NotificationHub.Show();
            }
            GetData();
        }


文章来源: SqlDependency doesn't fire on row insertion (or update, or delete)