SqlDependency不会在行插入(或更新或删除)时触发

时间:2015-02-09 00:24:18

标签: c# sql sql-server signalr sqldependency

在接下来的几个小时里我的头撞墙后,我慢慢开始意识到我的问题所在,所以让我回顾一下:当一行被插入时,我正试图改变一个网站的字符串一个数据库,但由于某种原因,我发出的触发器告诉我何时对数据库进行了更改,当插入,udpate或其他任何事情发生时根本不会触发。该表的Service Broker已启用。

这是涉及的代码:

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();使用更新的行数和日期向网站的所有客户端广播消息,但该消息永远不会发送,因为触发器不会触发。有什么想法吗?

提前谢谢!

1 个答案:

答案 0 :(得分:0)

您需要再次注册方法GetData()以继续接收事件。 像这样:

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